Ich habe ein .net-Projekt zur Wartung erhalten. Ich habe gerade den Code durchgesehen und dies bei einer Eigenschaftserklärung festgestellt:
public new string navUrl
{
get
{
return ...;
}
set
{
...
}
}
Ich habe mich gefragt, was der new
Modifikator mit der Eigenschaft macht.
new
Modifikator verursacht dieses Verhalten nicht, sondern teilt dem Compiler nur mit, dass Sie es absichtlich getan haben, sodass keine Warnmeldung angezeigt wird.new
versteckt das Eigentum.In Ihrem Code könnte dies folgendermaßen aussehen:
class base1 { public virtual string navUrl { get; set; } } class derived : base1 { public new string navUrl { get; set; } }
Hier in der abgeleiteten Klasse
navUrl
versteckt die Eigenschaft die Basisklasseneigenschaft.quelle
new
mit demselben Namen, aber mit einem anderen Typ verwenden würde?Dies ist auch hier dokumentiert .
Code-Snippet von 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.
quelle
new
Modifikator verursacht dieses Verhalten jedoch nicht. Er teilt dem Compiler nur mit, dass Sie es absichtlich getan haben, sodass keine Warnmeldung angezeigt wird.Einige Male als
Shadowing
oder Methode versteckt bezeichnet ; Die aufgerufene Methode hängt von der Art der Referenz zum Zeitpunkt des Aufrufs ab. Dies könnte helfen.quelle
https://msdn.microsoft.com/en-us/library/435f1dw2.aspx
Schauen Sie sich das erste Beispiel hier an, es gibt eine ziemlich gute Vorstellung davon, wie das
new
Schlüsselwort zum Maskieren von Basisklassenvariablen verwendet werden kannquelle