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

时间:2010-09-06 05:19:02

标签: c# .net asp.net

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

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

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

5 个答案:

答案 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关键字来掩盖基类变量