Как в C # создать объект по имени его типа?

Я знаю тип объекта (скажем, IAnimal), который мне нужно создать, и имя (скажем, Tiger). Как мне написать код для создания экземпляра Tiger, учитывая, что переменная, которая знает имя объекта, является строкой. Я, вероятно, упустил здесь что-то простое, но в настоящее время застрял на этом.

Обновление: я имел в виду Class Tiger: IAnimal, измененный выше, чтобы отразить это.


person alchemical    schedule 24.02.2010    source источник


Ответы (3)


Использование метода Activator.CreateInstance

пример:

// the string name must be fully qualified for GetType to work
string objName = "TestCreateInstance.MyObject";
IProcess txObject = (IProcess)Activator.CreateInstance(Type.GetType(objName));

or

object o = Activator.CreateInstance("Assem1.dll", "Friendly.Greeting");

См. Также: Примеры отражения C #

person Mitch Wheat    schedule 24.02.2010

Используйте отражение, чтобы создать экземпляр объекта класса по имени его типа.

object o = Activator.CreateInstance(Type.GetType("Tiger"));

Обратите внимание, что вы не можете создавать экземпляры интерфейсов (судя по вашему именованию), поскольку они являются просто контрактом, который определяет, что конкретный класс должен реализовать.

person Wim Hollebrandse    schedule 24.02.2010

Я не уверен, что полностью понимаю вопрос. Однако если предположить, что ITiger на самом деле является конкретным классом, а не интерфейсом (как предполагал I *).

Вы можете использовать отражение для создания и экземпляра типа из строки.

Что-то типа:

ITiger myTiger = Activator.CreateInstance("ITiger") as ITiger;

http://msdn.microsoft.com/en-us/library/system.activator.createinstance.aspx

Вы об этом спрашиваете?

person Brad Cunningham    schedule 24.02.2010