我已经获得了一个.net项目来维护。我只是浏览代码,我在一个属性声明中注意到了这一点:
public new string navUrl
{
get
{
return ...;
}
set
{
...
}
}
我想知道new
修饰符对属性做了什么?
答案 0 :(得分:59)
它隐藏了基类的navUrl属性。见new Modifier。如MSDN条目中所述,您可以使用完全限定名称访问“hidden”属性:BaseClass.navUrl
。滥用任何一种都可能导致大量混乱和可能的疯狂(即破坏代码)。
答案 1 :(得分:13)
new
隐藏了该属性。
在你的代码中可能是这样的:
class base1
{
public virtual string navUrl
{
get;
set;
}
}
class derived : base1
{
public new string navUrl
{
get;
set;
}
}
在派生类中,navUrl
属性隐藏了基类属性。
答案 2 :(得分:6)
这也记录在案here。
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.
答案 3 :(得分:3)
有时称为Shadowing
或 method hiding ;调用的方法取决于调用时的引用类型。 This might帮助。
答案 4 :(得分:1)
https://msdn.microsoft.com/en-us/library/435f1dw2.aspx
请看这里的第一个例子,它很好地了解了如何使用new
关键字来掩盖基类变量