Рассмотрим код ниже:Работа с объектами, созданными с Activator.CreateInstance
void fun1(string typeName)
{
object adap = Activator.CreateInstance(typeName);
adap.dowork(); //won't compile because of strongly typed.
}
Использование Activator.CreateInstance()
мы можем легко создать экземпляр любого типа, но если мы не знаем TypeName во время разработки, это не возможно, понизить его до его фактического типа.
Мой вопрос в том, как мы можем вызвать функцию экземпляра, созданную Activator.CreateInstance
, если мы не можем свести ее к соответствующему типу, поскольку мы не знаем имя типа во время разработки, но мы знаем, что функция существует.
Надеюсь, я ясно дал понять.
Если вы не знаете тип во время компиляции, чем вы знаете, чтобы вызвать dowork() на нем? Существует ли общий интерфейс между этими типами? –
Обычно это делается с интерфейсами. У вас есть абстрактный интерфейс (который действует как «контракт», который не должен сильно меняться), и вы зависите от этой, но не конкретной реализации. Затем вы можете получить информацию о членах реализации через интерфейс. –
Да, вы абсолютно правы, это обычно делается через интерфейсы или наследование, но я не могу использовать их в своем случае, потому что я не тот, кто создает «Тип», объект которого должен быть создан. –