Ich vor kurzem konfrontiert mit diesem Problem..ich weiß, das ist eine alte Frage, aber dachte jemand könnte nützlich finden die Lösung, die ich gefunden (mit net 4.0). Dies ist die Setup ich hatte:
public interface ISomeInterface{
String GetEntityType{ get; }
}
public abstract class BaseClass : ISomeInterface{
public String GetEntityType {
get{ return this.GetType().ToString(); }
}
}
public class ChildA : BaseClass { }
public class ChildB : BaseClass { }
Was ich tat, war eine Factory-Methode erstellen:
public static dynamic GetRealType { ISomeInterface param } {
return Activator.CreateInstance("dllname", param.GetEntityType);
}
Erstellen Sie das Objekt als ein dynamischer Typ war, was es für mich gelöst. Ich gefolgert den Typ durch ein Verfahren mit:
public void DoSomething<T>(T param){
IList<T> list = somecode...
}
diese mir einen Aufruf der Methode erlaubt zu tun und lassen .net
public void myMethod(ISomeInterface param) {
dynamic value = Factory.GetRealType (param);
DoSomething(value);
}
Hoffnung den Typ ableiten, ich habe nicht machen es verwirrend und es hilft tatsächlich auch, tut mir leid für die Wand des Textes
IList ist eine Schnittstelle, so dass Sie es nicht neu. Sie müssen einen Typ neu implementieren, der IList wie List implementiert. –