MSDN说:
当用作修饰符时,new关键字显式隐藏从基类继承的成员.隐藏继承的成员时,该成员的派生版本将替换基类版本.虽然您可以在不使用new修饰符的情况下隐藏成员,但结果是警告.如果使用new来显式隐藏成员,则会抑制此警告并记录派生版本旨在替代的事实.
例:
class Base
{
int value;
virtual bool Foo()
{
value++;
}
}
class Derived : Base
{
int value;
override bool Foo()
{
value++;
}
}
Run Code Online (Sandbox Code Playgroud)
我是否必须new向Derived.value声明添加修饰符?有什么变化?
Meh*_*ari 14
由于该value字段是private,它在派生类中是不可访问的.因此,派生类中的声明并不真正隐藏任何内容.您不应该添加new到声明中.如果你这样做,没有任何改变,除了编译器会警告你使用new不正确.如果该value字段在派生类中是可访问的(例如它是public),那么您应该习惯于new表达隐藏基本成员的意图:
class A {
public int field;
}
class B : A {
public int field; // warning. `B.field` hides `A.field`.
}
Run Code Online (Sandbox Code Playgroud)
使用new将沉默警告(它将没有其他影响):
class B : A {
public new int field; // Dear compiler, shut up please.
}
Run Code Online (Sandbox Code Playgroud)
您不能将方法声明为override和new.它们是相互排斥的.
| 归档时间: |
|
| 查看次数: |
2060 次 |
| 最近记录: |