Я прочитал некоторые другие ответы, чтобы сделать динамический бросок, и я не уверен, что они обращаются к ситуации, которую я хочу решить, поэтому вопрос.Динамическое литье в общий тип интерфейса
У меня есть интерфейс
public interface ICustomTransmitter<T> : IDataTransmitter where T : EventArgs
{
event EventHandler<T> DataEvent;
}
и набор функций, которые позволяют мне получить общий аргумент типа во время выполнения. Это делается для того, чтобы бросить к этому типу и подключить конкретное событие (это мысль код поэтому, пожалуйста, быть нежным)
public bool IsTypeOf(Type baseType, Type interfaceType,
out Type argumenType)
{
var interfaces = baseType.GetInterfaces();
argumenType = null;
foreach (Type @interface in interfaces)
{
if (@interface.Name != interfaceType.Name) continue;
if (@interface.IsGenericType)
{
argumenType = @interface.GetGenericArguments()[0];
}
return true;
}
return false;
}
И функция, которая использует магию выше
Type argument;
var generic = typeof (ICustomTransmitter<>);
if (IsTypeOf(receiver.GetType(),generic ,out argument))
{
var created = generic.MakeGenericType(new[] {argument});
//the line of code missing is below
receiver as created
}
ли это возможно чтобы передать получателю этот созданный тип? Также мне нужно иметь решение, которое работает как в dot net 3.5, так и в dot net 4.
Я отредактировал ваше название. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –
Спасибо @JohnSaunders, отметил – Bernard