virtual、override、new 可以作用于哪些成员?
ITPOW2016/10/31 16:54:49
virtual、override 作用于
属性
、
方法
。
new 除了作用于
属性
、
方法
,还可作用于
字段
、
静态字段
、
常量
。比如以下代码是正确的:
public class B { protected const string S = "b"; // 常量 public virtual void Print() { MessageBox.Show(S); } } public class D : B { protected new const string S = "d"; public override void Print() { MessageBox.Show(S); } }
说明:
由于基类的 S 并不是 private,所以派生类中要用 new 关键字(不用也可以,但在编译时会收到警告(如果你不理会该警告,也没有改变代码,第二次编译时就不会再次警告))。
如果基类的 S 是 private 的,则派生类中是看不到基类的 S 的,就像 S 不存在,派生类中再用 S 就与继承无关。
public class B { private const string S = "b"; // 注意 private public virtual void Print() { MessageBox.Show(S); } } public class D : B { protected const string S = "d"; // 这里 protected 并不是放大基类 S 的访问级别,因为基类那里是 private 的,压根就没传下来,所以这里的 S 跟基类的 S 没半毛钱关系。 public override void Print() { MessageBox.Show(S); } }
相关阅读
C# 类教程-多态性
<<返回首页<<