C#中的虚函数的作用

C#中的虚函数的作用

2014-5-19阅读294 评论0

先看一个例子:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication5
{
    class MyClass
    {
        public virtual int  fun(int i)
        {
            int k=1;
            return k * i;
        }
        public int test(int i) {
            Console.WriteLine("test结果是"+i*1);
            return 0;
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication5
{
    class VirtualFunctionClass:MyClass
    {
        public override int fun(int i)
        {
            int k = 3;
            return k * i;
        }
        public new int test(int i) 
        {
            Console.WriteLine("test结果是" + i*2);
            return 0;
        }

    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication5
{
    class TestClass3
    {
        static void Main()
        {
            MyClass myc1 = new MyClass();
            MyClass myc2 = new VirtualFunctionClass();
            Console.WriteLine(myc1.fun(1));
            Console.WriteLine(myc2.fun(1));
            myc1.test(1);
            myc2.test(1);
            Console.ReadLine();

        }
    }
}
/*输出结果是:
* 1
* 3
* test结果是1
* test结果是1
*/

 

可见,在C#和JAVA中,在派生类中对基类中的方法a重写,然后用基类的引用(指向派生类的对象,即多态性)调用方法a,得到结果是不一样的。

可以认为JAVA中所有的方法都是虚方法。而C#中只有在基类的方法中加上 virtual关键字,然后在派生类中重写,在多态时才有效。

你可能感兴趣的:(C#中的虚函数的作用)