2008-11-07 3 views
6

Ich habe eine Klasse, die von einer Basisklasse erbt und implementiert die folgenden ...Wie Compiler zu unterdrücken, für bestimmte Funktion in VS2005 (VB.Net) Warnung

Public Function CompareTo(ByVal obj As Object) As Integer Implements System.IComparable.CompareTo 

Nun ist die Basisklasse aus auch erbt implementiert dieses System.IComparable.CompareTo, damit ich die folgende Compiler-Warnung erhalte:

Warnung: 'System.IComparable.CompareTo' ist bereits von der Basisklasse implementiert. Re-Implementierung der Funktion angenommen.

Mir geht es gut, so meine Frage ist, wie kann ich diese Warnung für nur diese Funktion unterdrücken (d. H. Nicht alle solche Warnungen).

Klärungen:

  • ist hier ein link auf den Fehler auf MSDN.
  • Ich habe bereits beide Shadows und Overrides versucht und weder beseitigt die Warnung.
  • Die Warnung bezieht sich nicht auf die Methode selbst (es sei denn, Schatten oder Überschreibungen werden weggelassen), sondern sie ist speziell auf "Implementiert System.IComparable.CompareTo".
  • Ich möchte nicht alle Warnungen dieses Typs unterdrücken (wenn sie auftauchen), nur diesen.

Lösung:
Ich hatte gehofft, das System.Diagnostics.CodeAnalysis.SuppressMessage Attribut oder so etwas wie C# 's Pragma zu verwenden, aber sieht aus wie es keine Möglichkeit gibt, die Warnung für eine einzelne Zeile zu unterdrücken. Es gibt eine Möglichkeit, diese Nachricht für dieses Projekt zu deaktivieren, ohne die Warnungen auszuschalten.

Ich habe die .vbproj-Datei manuell bearbeitet und 42015 in den Knoten für Debug- und Release-Compilations eingefügt. Nicht ideal, aber besser als immer die Warnung in der IDE zu sehen.

Wenn jemand eine bessere Lösung hat, bitte fügen Sie es hinzu und ich werde es gerne versuchen, die Antwort zu kennzeichnen.

Antwort

9

Verwenden Sie nur 'Implementiert' in der Basisklasse:

Signatur in der Basisklasse:

Public Overridable Function CompareTo(ByVal obj As Object) As Integer Implements System.IComparable.CompareTo 

Signatur in der vererbten Klasse:

Public Overrides Function CompareTo(ByVal obj As Object) As Integer 
+1

Dies ist die einzig richtige Antwort. Der Text der Warnung impliziert dies - das heißt, das "angenommen" bedeutet, dass die Überschreibungen allein sicherstellen, dass die richtige Methode aufgerufen wird, wenn die Instanz die geerbte Klasse ist - aber es ist nicht sehr klar. – McKenzieG1

-1

Wechseln Sie in den Eigenschaften Ihres Projekts zur Registerkarte "Erstellen" und verwenden Sie das Textfeld "Warnungen unterdrücken".

+0

Ich möchte nicht alle Warnungen für dieses Projekt unterdrücken, nur dieses. –

+0

Sie würden nicht alle Nachrichten unterdrücken, da Sie mit Nachrichtencodes zur Unterdrückung angeben können. Überprüfen Sie meine Antwort unten. –

-1

Fügen Sie der Funktionsdefinition das Schlüsselwort Shadows hinzu.

Public Shadows Function CompareTo(ByVal obj As Object) As Integer Implements System.IComparable.CompareTo 
+0

Erprobt sowohl Schatten und Overrides, entfernen Sie die Warnung leider nicht. –

-1

Anstatt die Warnung zu unterdrücken, sollten Sie es nicht beheben? Unter der Annahme, dass die Basis Overridable ist,

Public Overrides Function CompareTo(ByVal obj As Object) As Integer Implements System.IComparable.CompareTo 

Wenn nicht, dann ist es Schatten,

Public Shadows Function CompareTo(ByVal obj As Object) As Integer Implements System.IComparable.CompareTo 

(Ich denke, das ist richtig, ich bin ein C# -Programmierer. Wenn nicht, bitte Kommentar und ich werde aktualisieren .)

+0

Erprobt sowohl Schatten und Overrides, entfernen Sie die Warnung leider nicht. –

1

Sie können die Unterdrückungswarnungen nur verwenden, um eine Warnung zu unterdrücken. Sehen Sie hier für more auf, wie man. Sie können auch die SuppressMessage Attribute verwenden.

0

Wenn Sie nicht über Zugriff auf die Basisklasse und kann daher die Methode Overrideable nicht machen, können Sie <NoWarn>42015</NoWarn> der Projektdatei hinzufügen.