我得到了一个.net项目来维护。我只是浏览代码,在属性声明中注意到了这一点:
public new string navUrl
{
get
{
return ...;
}
set
{
...
}
}
我想知道new修改器对属性有何作用?
Answers:
它隐藏了基类的navUrl属性。参见新的Modifier。如该MSDN条目中所述,您可以使用完全限定的名称来访问“隐藏”属性:BaseClass.navUrl。滥用其中任何一个都可能导致巨大的混乱和可能的精神错乱(即代码破损)。
这也记录在这里。
来自msdn的代码段。
public class BaseClass
{
public void DoWork() { }
public int WorkField;
public int WorkProperty
{
get { return 0; }
}
}
public class DerivedClass : BaseClass
{
public new void DoWork() { }
public new int WorkField;
public new int WorkProperty
{
get { return 0; }
}
}
DerivedClass B = new DerivedClass();
B.WorkProperty; // Calls the new property.
BaseClass A = (BaseClass)B;
A.WorkProperty; // Calls the old property.
new修饰符不会导致此行为,它只会告诉编译器您有意进行此操作,因此不会显示警告消息。
https://msdn.microsoft.com/zh-CN/library/435f1dw2.aspx
请看这里的第一个示例,它很好地说明了如何使用new关键字来屏蔽基类变量
new修改不会导致这种行为,它只是告诉你这样做是故意的编译器,所以它不会显示一个警告消息。