属性声明中的“新”关键字在c#

我已经得到一个.net项目来维护。 我只是浏览代码,我注意到了一个属性声明:

public new string navUrl { get { return ...; } set { ... } } 

我想知道new修饰符对属性做了什么?

它隐藏了基类的navUrl属性。 查看新的修改器 。 正如在MSDN条目中提到的那样,您可以使用完全限定名称访问“hidden”属性: BaseClass.navUrl 。 滥用任何一方都可能导致大量混淆和可能的疯狂(即破译)。

new的隐藏的财产。

在你的代码中可能是这样的:

 class base1 { public virtual string navUrl { get; set; } } class derived : base1 { public new string navUrl { get; set; } } 

在派生类中, navUrl属性隐藏基类属性。

有时称为隐藏方法隐藏 ; 所调用的方法取决于调用时引用的types。 这可能有帮助。

这也logging在这里 。

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. 

https://msdn.microsoft.com/en-us/library/435f1dw2.aspx

看看这里的第一个例子,它提供了一个关于如何使用new关键字来掩盖基类variables的相当好的概念