2014-05-13 13 views
6

Microsoft Artikel über C# Coding Conventions (C# Programming Guide) heißt es ausdrücklich:Warum "nicht auf ein statisches Element zugreifen, das in einer Basisklasse aus einer abgeleiteten Klasse definiert ist"

„Seien Sie nicht ein statisches Element zuzugreifen, die in einer Basisklasse aus einer abgeleiteten Klasse definiert ist.“

Warum sollten Sie nicht auf das statische Element zugreifen?

Es scheint als gäbe es gültige Szenarien, in denen dies geschehen sollte, zum Beispiel sind alle const Mitglieder statisch. Sollten abgeleitete Klassen niemals ein in der Basisklasse definiertes Konst-Element lesen können?

+0

Sehen Sie sich diese Frage an: [Vermeiden von "Zugriff auf ein statisches Element eines Typs über einen abgeleiteten Typ"] (http://stackoverflow.com/questions/4405953/avoiding-access-toa-static- member-of-ein-type-via-a-derived-type? rq = 1) –

Antwort

6

Verwenden wir object.ReferenceEquals als ein Beispiel. Hier sind ein paar Möglichkeiten, wie Sie diese Methode von einer abgeleiteten Klasse aufrufen können:

class A { 
A() { 
    ReferenceEquals("a", "b"); //your warning is based on this style 
    object.ReferenceEquals("a", "b"); //recommended style 
} 
} 

Die Tatsache, dass ReferenceEquals in A zugänglich ist, ist nur ein Zufall. Eine statische Methode ist unabhängig von einer Vererbungshierarchie. Nennen Sie es daher von überall aus immer als vollständig qualifiziert.

Bei dieser Warnung geht es nur um Stil und Klarheit. Alle Varianten, die ich zeigte, kompilieren zu derselben IL.

Eine andere Interpretation wäre, dass Sie die Vererbung missbrauchen, um die zum Aufrufen einer Methode verwendete Syntax zu verkürzen. Dies ist ein Missbrauch der Vererbung. ASP.NET MVC tut dies mit der Controller-Basisklasse. Es ermöglicht Ihnen, return View(); zu schreiben. Es verwendet Vererbung, um eine Reihe von Methoden bequem verfügbar zu machen.

+0

Ihre ersten beiden (Zugriff auf sie wie eine Instanzmethode) kompilieren nicht in C#; Vielleicht denkst du Java? –

+0

@TimS. tatsächlich war es Java. Vielen Dank. – usr

Verwandte Themen