"новое" ключевое слово в объявлении свойства в С#
Мне был дан проект .net для поддержки. Я просто просматривал код, и я заметил это в объявлении свойства:
public new string navUrl
{
get
{
return ...;
}
set
{
...
}
}
Мне было интересно, что делает модификатор new
для свойства?
Ответы
Ответ 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
скрывает свойство базового класса.
Ответ 3
Несколько раз называется Shadowing
или метод скрывается; Вызываемый метод зависит от типа ссылки в точке вызова. Это может помочь.
Ответ 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
можно использовать для маскирования переменных базового класса