Verwendung Während einige veraltete Code Entfernen ich auf ein unerwartetes Szenario kam, unten neu erstellt:Deprecation Verhalten der [Veraltet] Attribut
class Program
{
static void Main(string[] args)
{
ViableMethod();
Console.WriteLine("");
SoftDeprecatedMethod();//Compiler warning
//HardDeprecatedMethod();//Can't call that from here, compiler error
Console.ReadKey(true);
}
public static void ViableMethod()
{
Console.WriteLine("ViableMethod, calls SoftDeprecatedMethod");
SoftDeprecatedMethod();//Compiler warning
//HardDeprecatedMethod();//Can't call that from here, compiler error
}
[Obsolete("soft", false)]
public static void SoftDeprecatedMethod()
{
Console.WriteLine("SoftDeprecatedMethod, calls HardDeprecatedMethod");
HardDeprecatedMethod();
}
[Obsolete("hard", true)]
public static void HardDeprecatedMethod()
{
Console.WriteLine("HardDeprecatedMethod");
}
}
in der Ausgabe Basierend es scheint, dass mit einer Warnung veralteten Funktionen sind erlaubt Funktionen aufrufen veraltet mit einem Fehler und der Code wird ausgeführt.
Meine Erwartung war, dass ich einen Compilerfehler sehen würde, der beschwert, dass der Anruf HardDeprecatedMethod()
von SoftDeprecatedMethod()
nicht erlaubt ist. Das beobachtete Verhalten scheint mir seltsam.
Weiß jemand, ob dies das gewünschte Verhalten ist (und wenn ja, warum), oder könnte dies ein Fehler in der Implementierung des [Obsolete]
Attributs sein?
Große Frage. Ich vermute, dass es absichtlich ist (da es manchmal den Abschaffungsprozess viel glatter machen kann), aber es ist * nicht * in der Sprachspezifikation enthalten. –
@JonSkeet Als ich die Frage las, war mein erster Gedanke: "Gott, warum hat Jon das nicht beantwortet?" und dann habe ich deinen Kommentar gelesen. Das war irgendwie ... unerwartet :-) – Krumelur
Nur ein weiterer Hinweis, '[Obsolet]' ist ein [Attribut] (http://msdn.microsoft.com/en-us/library/system.attribute.aspx), kein Schlüsselwort Sie können gerne eine Variable/Klasse 'Obsolete' benennen, wenn Sie dies wünschen. –