ключевое слово" new " в объявлении свойств в c#


мне дали проект .net для поддержания. Я просто просматривал код, и я заметил это в объявлении свойства:

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

мне было интересно, что значит new модификатор do для свойства?

5 63

5 ответов:

он скрывает свойство navUrl базового класса. Смотрите новый модификатор. Как уже упоминалось в этой записи MSDN, вы можете получить доступ к свойству "hidden" с полными именами: BaseClass.navUrl. Злоупотребление любым из них может привести к массовой путанице и возможному безумию (т. е. нарушенный код).

new скрывает свойство.

это может быть так в вашем коде:

class base1
{
    public virtual string navUrl
    {
        get;
        set;
    }
}

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

здесь, в производном классе 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.

несколько раз упоминается как Shadowing или способ сокрытия; вызываемый метод зависит от типа ссылки в точке вызова. это может помочь.

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

посмотрите на первый пример, это дает довольно хорошее представление о том, как new ключевое слово может использоваться для маскировки переменных базового класса