Ich entwickle eine Anwendung, wo ich eine Methode einer generischen Klasse aufrufen muss und mir den tatsächlichen Typ der Instanzen nicht interessiert. So etwas wie der folgenden Java-Code:Was Java-Platzhalter in C# Generika entspricht
public class Item<T>{
private T item;
public doSomething(){...}
}
...
public void processItems(Item<?>[] items){
for(Item<?> item : items)
item.doSomething();
}
Damals habe ich auf Eile war, so löste ich mein Problem, indem eine Schnittstelle mit den Methoden definieren, die ich brauchte zu berufen und machte die generische Klasse es umzusetzen.
public interface IItem
{
void doSomething();
}
public class Item<T> : IItem {
private T item;
public void doSomething(){...}
}
...
public void processItems(IItem[] items)
{
foreach(IItem item in items)
item.doSomething();
}
Diese Problemumgehung funktioniert gut, aber ich würde gerne wissen, was die richtige Art und Weise ist das gleiche Verhalten zu erreichen.
EDIT:
Ich habe vergessen zu verweisen, dass der Anrufer von processItems
nicht die tatsächlichen Typen nicht kennt. Eigentlich war die Idee, dass das als Argument übergebene Array processItems
gemischte Typen enthalten könnte. Da es nicht möglich ist, ein solches Array in .Net zu haben, scheint die Verwendung einer nicht-generischen Basisklasse oder -schnittstelle der einzige Weg zu sein.
Blargh, ein paar Sekunden zu früh. : P –
Ja, schlag mich auch. Können Sie jedoch mit einem Beispiel für den Anrufer bearbeiten? –
nur 'ProcessItems (data);' –