[C#基础] 继承
标签:
虚方法和覆写方法虚方法可以使基类的引用访问"升至"派生类中
可以使用基类引用调用派生类的方法,只需满足下面的条件
派生类的方法和基类的方法有相同的签名和返回类型
基类的方法使用virtual标注
派生类的方法使用override标注
class Program { static void Main(string[] args) { MyDerivedClass derived = new MyDerivedClass(); MyBaseClass mybc = (MyBaseClass)derived; derived.Print(); mybc.Print(); Console.ReadLine(); } } class MyBaseClass //基类 { virtual public void Print() { Console.WriteLine("基类"); } } class MyDerivedClass : MyBaseClass //派生类 { public override void Print() { Console.WriteLine("派生类"); } }
View Code上面代码阐明了virtual和override方法。
关于virtual和override的信息如下
覆写和被覆写的方法必须有相同的可访问性
不能覆写static方法或非虚方法
方法,属性和索引器,事件都可以被声明为virtual和override
覆写标记为override的方法当使用对象的基类部分的引用调用一个覆写方法时。方法的调用被沿派生层上溯执行,一直到标记为override的方法的最高派生版本
如果在更高的派生级别有该方法的其他声明,但没有被标记为override,那么它们不会别调用
class MyBaseClass //基类 { virtual public void Print() { Console.WriteLine("基类"); } } class MyDerivedClass : MyBaseClass //派生类 { public override void Print() { Console.WriteLine("派生类"); } } class SecondDerived : MyDerivedClass//最高派生类 { //to }
View Code 情况1:使用override声明print如果把SecondDerived的Print方法声明为override,那么他会覆写方法的全部两个派生级别的版本
class SecondDerived : MyDerivedClass//最高派生类 { public override void Print() { Console.WriteLine("第二派生类"); } } static void Main(string[] args) { SecondDerived derived = new SecondDerived(); MyBaseClass mybc = (MyBaseClass)derived; derived.Print(); mybc.Print(); Console.ReadLine(); }
View Code 情况2:使用new声明Print
class SecondDerived : MyDerivedClass//最高派生类 { new public void Print() { Console.WriteLine("第二派生类"); } } static void Main(string[] args) { SecondDerived derived = new SecondDerived(); MyBaseClass mybc = (MyBaseClass)derived; derived.Print(); mybc.Print(); Console.ReadLine(); }
View Code 覆盖其他成员类型
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/67004.html