Frage

Ich habe eine öffentliche statische Klasse in der ich eine Methode ToString () haben möchte.

Ich habe es als public static string ToString () definiert, aber die folgende Warnung erhalten:

  

'Class.ToString ()' verbirgt geerbten Member 'Object.ToString ()'. Um das aktuelle Element zu machen, dass die Umsetzung außer Kraft setzen, fügen Sie das Schlüsselwort override. Ansonsten das neue Schlüsselwort hinzuzufügen.

Wenn ich das Schlüsselwort override hinzufügen bekomme ich diesen Fehler statt:

  

Ein statisches Element ‚Class.ToString ()‘ kann nicht als Überschreibung, virtuell markiert werden, oder abstrakt

Wie kann ich von dieser Warnung los und lasse meine statische Klasse die Methode ToString () hat.

Danke,
Keith

War es hilfreich?

Lösung

Ja, den „neuen“ Modifier wird die Compiler-Warnung effektiv zum Schweigen bringen, aber Sie sind explizit versteckt eine Instanz-Methode mit einer statischen Methode. (Dies ist anders als die Methode überschreibt.) In der Regel wollen Sie keine Instanz Methode außer mit sehr guten Gründen zu verbergen, und Sie sollen es wirklich nicht mit einer statischen Methode verbergen, als dass wirklich das Verhalten Semantik des Anrufs ändert. Jedes Objekt in .NET hat eine Instanzmethode namens ToString (), die ein bestimmtes Verhalten hat, dass die Entwickler erwarten; durch dieses Verhalten mit einem neuen statischen Methode verstecken Sie diese Erwartung ändern, die zu viel Verwirrung führen kann.

Was sind Sie „auf Reihung“? Statische Klassen halten normalerweise keine internen Zustand so gibt es wirklich keine internen Daten sein sollte als die logische Ausgang eines ToString () Aufruf zur Verfügung zu stellen. Vielleicht möchten Sie Ihre Klasse-Design oder bieten eine andere Methode Namen zu überdenken, die deutlicher die Zwecke des Verfahrens zeigt, ohne die Instanz ToString versteckt ().

Andere Tipps

In einer statischen Klasse können Sie nicht ToString überschreiben. .ToString ist eine Instanzmethode und definitionsgemäß eine statische Klasse können nur statische Elemente aufweisen.

Auch warum wollen Sie außer Kraft setzen .ToString ()? Es gibt keine Möglichkeit eine Instanz der Klasse zu erhalten und somit keine Möglichkeit, die Funktion aufzurufen.

Hinweis: Um die neue Syntax verwendet nicht .ToString außer Kraft setzen. Es wird ein neues Mitglied erstellen, die völlig unabhängig von dem Object.ToString () -Methode ist.

Ok, also die Frage stellen, fand ich eine Antwort:

Der neue Modifier:

  

http://msdn.microsoft. com / en-us / library / 51y09td4 (VS.71) aspx # vclrfnew_newmodifier

Hier ist die Methode jetzt:

  

public neues statisches String toString ()

Danke, Keith

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top