做了1年多了C#,发现些项目过程中很多基础东西都不是很清晰,基础不够牢固。现在开始复习基础知识并做重点记录
方法需要被重写的时候,可以在方法前加入virtual使方法变成虚方法。
这样我们可以重新写个方法对虚方法进行重写需要加上override。
注意:成员字段和静态函数都不能声明为virtual,因为这个概念支队类中的实例函数成员有意义。
1. 重写override:基类方法声明为virtual(虚方法),派生类中使用override申明此方法的重写.
在重写方法中,有个特殊方法,base.<MethodName>(),这里的MethodName是父类的方法名。
class MyAlass:Base2 { public override void ClassB() { base.ClassB(); Console.WriteLine("a.ClassB()"); } }直接在子类重写方法中加载父类方法。
结果是

2.隐藏 : 基类方法不做申明(默认为非虚方法),在派生类中使用new声明此方法的隐藏。
自己的理解:
自己的理解:
向下转型继承,子类new覆盖父类的方法,在调用方法的时候,显示和调用的是父类的方法而不是子类的方法。
子类override重载父类方法,在调用方法的时候,调用的是子类的方法。相当于删除了父类的方法
说白了:new是覆盖,override是重载,“覆盖”并不意味着“删除”,但“重载”意味着“删除”,这就是“覆盖”和“重载”的区别
例子:
//基类1 class Base { public void ClassA() { Console.WriteLine("Base.ClassA()"); } } //子类覆盖基类方法 class MyClass:Base { public new void ClassA() { Console.WriteLine("c.ClassA()"); } } //基类2class Base2 { public virtual void ClassB() { Console.WriteLine("Base2.ClassB()"); } } //子类重写基类2的方法class MyAlass:Base2 { public override void ClassB() { Console.WriteLine("a.ClassB()"); } } //主程序 class Program { static void Main(string[] args) { Base b1 = new Base(); b1.ClassA(); Base c = new MyClass(); c.ClassA(); Console.WriteLine("
"); Base2 b2 = new Base2(); b2.ClassB(); Base2 a = new MyAlass(); a.ClassB(); Console.ReadKey(); } }运行结果:
