Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

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

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

Здесь в производном классе свойство navUrl скрывает свойство базового класса.

Ответ 4

Это также документировано здесь.

Код фрагмента из 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.

Ответ 5

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

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