Frage

Ich erhalte die folgende Compiler Warnung:

'Resources.Foo.GetType()' hides inherited member 'object.GetType()'. Use the new keyword if hiding was intended.    Resources.NET\Resources\Class1.cs   123 20  Resources

für diesen (sehr vereinfacht) Code:

public interface IFoo
{
    int GetType();
    string GetDisplayName();
}

public class Foo : IFoo
{
    public int GetType() { return 3; }   *** Warning: points to here (line 123)***
    public string GetDisplayName() { return "Foo"; }
}

Beachten Sie, was ich nicht bekommen, ist, warum die GetDisplayName () funktioniert nicht eine Warnung erhalten. Ich bin mit Blick eindeutig etwas.

Ich habe um Stack-Überlauf steckt und diesen Fehler gegoogelt und es scheint Klassenvererbung gelten, nicht-Schnittstellen. Ich bin wirklich verwirrt, warum würde dies für die Schnittstelle ausgelöst werden (was seine Methoden als virtuelle definiert).

Vielen Dank im Voraus für die Einsicht.

War es hilfreich?

Lösung

Die GetType Methode basiert auf der Definition System.Object -Klasse, die ist die ultimative Basisklasse aller Klassen des Framework.

Diese Methode wird verwendet, um den Typ zu bekommen, die aktuelle Instanz in Laufzeit, und ich denke, dass man nicht außer Kraft setzt sie beabsichtigt, (Sie einen int Rückgabetyp haben).

Ich schlage vor, Sie die Methode umbenennen GetFooType oder etwas anderes, oder setzen Ihre Schnittstelle explizit Laufzeitprobleme zu vermeiden.

Andere Tipps

Es bezieht sich auf Ihre Methode versteckt GetType von Objekt, der nicht von der Schnittstelle. Da Ihre Klasse erbt Objekt und implementiert IFoo, und sowohl ein GetType Verfahren bereitzustellen, mit implizit Implementierung der Schnittstelle Sie die GetType von Objekt geerbt werden verbergen. Wenn Sie noch Ihre Interface-Methode wollen GetType aufgerufen werden, können Sie implementieren es explizit statt in Foo:

int IFoo.GetType()
{
    return 3;
}

Alle Typen in .NET stammen aus System.Object.

System.Object definiert bereits eine Methode namens GetType. Wenn Sie eine andere Methode ‚GetType‘ in Ihrer Klasse definieren und wenn jemand ein Objekt der Klasse erstellt, können sie rufen nie die GetType-Methode von System.Object zur Verfügung gestellt. Dies ist der Grund, warum Sie die Warnung erhalten, dass ‚GetType‘ die Methode in System.Object definiert versteckt. Sie erhalten nicht diese Warnung für GetDisplayName weil System.Object (oder in diesem Fall jede übergeordnete Klasse) hat diese Methode nicht definieren.

Ich würde empfehlen, dass Sie Ihre Methodennamen sonst erwartet Aufruf System.Object Implementierung bezieht GetType-Methode als allgemein .NET-Entwickler, um etwas zu ändern.

beschweren es sich nicht um Ihre Implementierung der Schnittstelle, sondern Ihre Neuimplementierung von GetType (), das sich bereits auf „Objekt“ - von dem Foo erbt automatisch. „Objekt“ nicht über ein GetDisplayName Verfahren und wirft daher keine Beschwerde für diesen einen. Versuchen Sie, die Methode das Umbenennen oder das Hinzufügen in der „neuen“ Modifikator, wenn Sie wirklich ausblenden möchten Object.GetType (), obwohl es nicht empfohlen wird.

System.Object-Klasse bereits die GetType () Methode

sollten Sie das neue oder Schlüsselwort override verwenden, dieses Problem zu lösen

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