Generika und Schnittstellen Aufzählung
-
10-07-2019 - |
Frage
Wenn eine Reihe von Klassen, die alle eine Schnittstelle implementieren.
interface IMyinterface<T>
{
int foo(T Bar);
}
Ich möchte sie alle in einer Liste schieben und durch sie aufzuzählen.
List<IMyinterface> list
foreach(IMyinterface in list)
// etc...
aber der Compiler will wissen, was T ist. Darf ich das machen? Wie kann ich dieses Problem überwinden?
Lösung
Es gibt keine IMyInterface Typ gibt es nur ein IMyinterface`1 Typ, der eine Art Argument erfordert. Sie könnten einen IMyInterface Typen erstellen: -
interface IMyinterface { ... }
dann erbt von ihm
interface IMyinterface<T> : IMyinterface { ... }
Sie müssten alle Mitglieder bewegen Sie in der foreach-Schleife auf die IMyInterface Definition verwenden möchten.
Andere Tipps
Wenn Sie eine Methode mit T in der Signatur berufen, ist die Antwort, die Sie nicht können. Ansonsten können Sie tun, wie AnthonyWJones schlägt
Sie müssen noch den Compiler sagen, was T zu einem bestimmten Zeitpunkt ist, aber genau das, was Sie gefragt, getan werden kann:
interface IMyinterface
{
int foo<T>(T Bar);
}
List<IMyinterface> list = new List<IMyinterface>();
foreach(IMyinterface a in list){}