Мне интересно, можно ли применить объект к типу ... Я только начал использовать Reflection, поэтому, возможно, я делаю все это неправильно, но вот что мне хотелось бы сделать:Кастинг на тип
...
Type type = ...;
Type interfaceType = someOtherType.GetInterface("IConverter`2");
return (Cast to interfaceType)Activator.CreateInstance(type);
Возможно ли отливка от интерфейса?
Update:
Компилятор говорит, что T и K не могут быть найдены. Экземпляр MyInterface Тип знает T и класс K ...
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();
}
}
Второе обновление:
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();
}
}
Хорошо, я попробую это, но что, если я хочу вызвать метод из второго интерфейса (typesave members)? (см. новое обновление). спасибо. –
Вы не можете вызывать типы типов, не зная типов. Если вы их знаете, вы можете отправить его на соответствующий IConverter. Но лучше предоставить все в общем интерфейсе IConverter, который должен быть доступен, не зная типов. У меня иногда есть свойства типа 'object UntypedValue {get; } ', чтобы обеспечить доступ к значениям, не зная тип. Таким образом, правило: используйте T и K всякий раз, когда вы их знаете, но предоставляйте способ делать все, не зная их. –