Ich frage mich, ob es möglich ist, ein Objekt zu einem Typ zu werfen ... Ich habe gerade angefangen, Reflection zu verwenden, also mache ich vielleicht alles falsch, aber hier ist, was ich tun möchte:Casting zu einem Typ
...
Type type = ...;
Type interfaceType = someOtherType.GetInterface("IConverter`2");
return (Cast to interfaceType)Activator.CreateInstance(type);
Ist die Umwandlung in die Schnittstelle möglich?
Update:
Compiler sagt, dass T und K kann nicht gefunden werden. Die myInterface Typ Instanz kennt die T und K-Klasse ...
public IConverter<T, K> GetConverter(Type type)
{
if (dtoModelDictionary.ContainsKey(type))
{
Type foundType = dtoModelDictionary[type];
Type myInterface = foundType.GetInterface("IConverter`2");
return (IConverter<T, K>)Activator.CreateInstance(foundType);
}
else if (dalModelDictionary.ContainsKey(type))
{
Type foundType = dalModelDictionary[type];
return (IConverter<T, K>)Activator.CreateInstance(foundType);
}
else
{
throw new System.Exception();
}
}
Zweites Update:
public SomeClass GetConverter(Type type)
{
if (dtoModelDictionary.ContainsKey(type))
{
Type foundType = dtoModelDictionary[type];
Type myInterface = foundType.GetInterface("IConverter`2");
IConverter<T, K> converter = (IConverter<T, K>)Activator.CreateInstance(foundType);
return converter.someMethod();
}
}
Ok, ich werde das versuchen, aber was, wenn ich eine Methode aus der zweiten Schnittstelle (typesave Mitglieder) auslösen möchte? (siehe neues Update). Danke. –
Sie können typesave-Member nicht aufrufen, ohne die Typen zu kennen. Wenn Sie sie kennen, können Sie sie in den entsprechenden IConverter umwandeln. Aber es ist besser, alles in der allgemeinen IConverter-Schnittstelle bereitzustellen, die verfügbar sein muss, ohne die Typen zu kennen. Ich habe manchmal Eigenschaften wie 'object UntypedValue {get; } 'um Zugriff auf Werte zu ermöglichen, ohne den Typ zu kennen. Die Regel lautet also: Benutze T und K, wann immer du sie kennst, aber gib ihnen einen Weg, alles zu tun, ohne sie zu kennen. –