new、override和终类sealed
NEW修饰符与重载
new修饰符主要用于在子类中重新定义父类中的字段或方法(同名)
用new重定义后父类方法将会被隐藏,若不想隐藏父类方法,就改个名字
重载时重新定义父类中已拥有的某方法,父类中方法要加virtual修饰符,而子类中重新定义的方法要加override修饰符
new 与override的区别
当使用override重写时
1 public class BaseClass 2 { 3 public virtual void Test() => Console.WriteLine("Base"); 4 } 5 6 public class MyClass : BaseClass 7 { 8 public override void Test() => Console.WriteLine("666"); 9 10 }
运行下述
BaseClass baseTest = new MyClass(); baseTest.Test();
结果为 666
当使用new关键字时并运行上述时
1 public class BaseClass 2 { 3 public virtual void Test() => Console.WriteLine("Base"); 4 } 5 6 public class MyClass : BaseClass 7 { 8 public new void Test() => Console.WriteLine("666"); 9 10 } 11 12 //运行 13 BaseClass baseTest = new MyClass(); 14 baseTest.Test();
结果为 Base
重写后用上述方法定义基类,运行为重写后方法
用new隐藏后,依然可以通过基类来访问被隐藏的方法
终类
终类为不可继承的类,用sealed修饰符表示,种类无法强行继承,否则会报错
1 public sealed class Teacher //sealed 定义不能继承的终类 2 { 3 private string name; 4 public string Name { get=>name ; set =>name=value; }15 } 16 17 //public class Teacher1:Teacher //会报错并提示无法从密封类中继承 18 // { 19 20 // }