我已經被賦予了一個.net項目來維護。我只是通過代碼瀏覽,我注意到這對財產申報:在c#屬性聲明中的「新」關鍵字
public new string navUrl
{
get
{
return ...;
}
set
{
...
}
}
我想知道什麼是new
修改做房地產?
我已經被賦予了一個.net項目來維護。我只是通過代碼瀏覽,我注意到這對財產申報:在c#屬性聲明中的「新」關鍵字
public new string navUrl
{
get
{
return ...;
}
set
{
...
}
}
我想知道什麼是new
修改做房地產?
它隱藏了基類的navUrl屬性。見new Modifier。正如在MSDN條目中提到的那樣,您可以使用完全限定名稱訪問「隱藏」屬性:BaseClass.navUrl
。濫用任何一方都可能導致大量混淆和可能的瘋狂(即破碼)。
new
正在隱藏該物業。
它可能是這樣的代碼:
class base1
{
public virtual string navUrl
{
get;
set;
}
}
class derived : base1
{
public new string navUrl
{
get;
set;
}
}
在這裏,在派生類中,navUrl
屬性隱藏基類屬性。
有時稱爲Shadowing
或method hiding;調用的方法取決於調用時引用的類型。 This might幫助。
這也記錄在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.
您的代碼片段很好地闡明瞭隱藏的概念,但是'new'修飾符不會導致這種行爲,它只會告訴編譯器您有意識地這樣做,因此它不會顯示警告消息。 – BornToCode 2014-03-25 17:45:32
那麼是什麼導致了這種行爲?通常A.WorkProperty會調用派生類的屬性,因爲A引用派生對象,而不管引用類型如何。 – Squirrelkiller 2016-09-07 09:20:52
https://msdn.microsoft.com/en-us/library/435f1dw2.aspx
看看這裏的第一個例子,它給人的new
關鍵字如何被用來掩蓋基類變量心中有數
的'new'修改不會導致此行爲,它只會告訴編譯器你故意這麼做,所以它不會顯示警告消息。 – BornToCode 2014-03-25 17:46:04