in .NET Framework, gibt es einen allgemeinen IEnumerable<T>
Schnittstelle, die aus den nicht-generic IEnumerable
erbt, und sie haben beide eine GetEnumerator()
Methode. Der einzige Unterschied zwischen diesen beiden GetEnumerator()
ist der Rückgabetyp. Jetzt habe ich ein ähnliches Design, aber wenn ich den Code zu kompilieren, die Compiler sagte:IEnumerable.GetEnumerator() und IEnumerable <T> .GetEnumerator()
MyInterface<T>.GetItem()
‚verbirgt geerbt Mitglied‘ MyInterface.GetItem()
‘. Verwenden Sie das neue Schlüsselwort, wenn das Ausblenden beabsichtigt war.
Die MyInterface<T>.GetItem()
gibt einen konkreten Typ T zurück, während MyInterface.GetItem()
den Typ System.Object zurückgibt.
Also ich denke, wenn die BCL-Team-Jungs das. NET-Framework kompilieren, werden sie die gleiche Warnung erhalten.
Ich denke Compiler Warnungen zu haben ist nicht gut, was denkst du? Und wie kann ich dieses Problem lösen? Ich meine, ich möchte den konkreten Typ T beim Aufruf der MyInterface<T>.GetItem()
nicht nur eine Instanz des Typs System.Object bekommen.
Vielen Dank im Voraus! :-)
Ergänzung: Ich sage die Schnittstellen theirselves: IMyInterface erbt von IMyInterface, und sie haben beide die GetItem() -Methode (die IMyInterface.GetItem() zurückkehrt T eingeben, während IMyInterface. GetItem() liefert den Typ System.Object). Das Problem ist, dass, wenn unser Code nur diese beiden Schnittstellen haben, das heißt, keine abgeleiteten konkreten Klassen, werden wir die Compiler-Warnung nach dem Kompilieren des Quellcodes auftreten.
Hi, ich sage das nicht, bitte seht meinen "Nachtrag" in der Post. Danke :) –
+1, obwohl Sie keine Zugriffsebene für eine explizite Schnittstellenimplementierung angeben können – erikkallen
@Dylan: Verwenden Sie das neue Schlüsselwort, wie der Compiler empfiehlt. Siehe meine Änderungen oben. –