首页 > 代码库 > 虚方法和覆写方法

虚方法和覆写方法

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace nange_1{    class A    {        public void f()        { Console.WriteLine("在基类中"); }    }    class B : A    {        public void f()        { Console.WriteLine("在子类中"); }    }    class Program    {        static void Main(string[] args)        {            B objB = new B();            A objA = objB;//基类指向派生类对象            objA.f();    //但是仍然调用的是基类的方法!            Console.ReadLine();        }    }}
输出结果如图所示:

 


using
System;using System.Collections.Generic;using System.Linq;using System.Text;namespace nange_1{ class A { virtual public void f() {Console.WriteLine("在基类中"); } } class B:A { override public void f() { Console.WriteLine("在子类中"); } } class Program { static void Main(string[] args) { B objB=new B(); A objA = new A(); objA.f(); //基类调用自己的方法 objA = (A)objB;//加不加(A)都一样的!基类引用指向派生类对象 objA.f();//此时调用的派生类的方法!和上面的完全不一样的! objB.f(); Console.ReadLine(); } }}
/*关于virtual和override修饰符的重要信息如下:覆写和被覆写的方法必须要有相同的可访问性!不能复写static方法和非虚方法。方法,属性,索引器,以及另一种成员类型事件(都可以被声明为virtual和override)*/
总结:这个和c++里面的虚函数效果是一样的!也就是所谓的多态性!

 

虚方法和覆写方法