Ich entwickle eine Anwendung, in der ich eine Methode einer generischen Klasse aufrufen muss, ohne mich um den tatsächlichen Typ der Instanz zu kümmern. Etwas wie der folgende Java-Code:
public class Item<T>{
private T item;
public doSomething(){...}
}
...
public void processItems(Item<?>[] items){
for(Item<?> item : items)
item.doSomething();
}
Da ich es damals sehr eilig hatte, löste ich das Problem, indem ich eine Schnittstelle mit den aufzurufenden Methoden definierte und die generische Klasse diese implementieren ließ.
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 Umgehung funktioniert gut, aber ich würde gerne wissen, was der richtige Weg ist, um das gleiche Verhalten zu erreichen.
EDIT:
Ich habe vergessen zu erwähnen, dass der Anrufer von processItems
kennt die tatsächlichen Typen nicht. Eigentlich war die Idee, dass das Array, das als Argument an processItems
könnte gemischte Typen enthalten. Da es nicht möglich ist, ein solches Array in .Net zu haben, scheint die Verwendung einer nicht-generischen Basisklasse oder Schnittstelle die einzige Möglichkeit zu sein.