2015-03-28 2 views
0

Может ли строка использоваться для объявления типа на C#?C# Как использовать строку для объявления типа

Вместо:

MyType foo = bar; 

Вы бы строку "MyType".

string typeString = "MyType"; 
TypeOftypeString foo = bar; 

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

В Unity3D я могу установить строку для определенного значения перед временем выполнения. Могу ли я использовать эту строку для определения типа? Даже если это окажется нелогичным преследованием в моем коде, возможно ли это? Если да, то как вы это делаете?

Редактировать: Развернуть все, что я сказал. MyType - это класс внутри приложения. У меня также есть MyOtherType и MyDifferantType. Я хочу иметь эту строку как «MyType» или «MyOtherType», а затем назначить уже созданный экземпляр этого объекта в это поле. Я пытаюсь избежать очень длинного оператора if-else или switch(), где я делаю случай для каждого типа, с которым может столкнуться объект, даже если этот тип предварительно определен, когда строка задана перед временем выполнения.

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

+1

TypeOftypeString всегда будет строка, вы имели в виду значение TypeString? – Hristo

+3

вы можете использовать 'Activator.CreateInstance'. –

+0

@ DanielA.White Он хочет создать новый тип во время выполнения, а не создавать уже созданные. – Hristo

ответ

1

Если я правильно понял, вы хотите создать экземпляр класса на основе имени из строки. Это один из способов сделать это.

var typeName = "someType"; 
var type = Type.GetType(typeName, true); 
var instanceOfType = (someInterfaceCast)Activator.CreateInstance(type); //I like to use an interface cast here 

Обновление: Как упоминалось выше, если вы можете избежать этого пути, лучше всего это сделать.

+0

Если вы используете строку для создания экземпляра типа, знать его тип. В лучшем случае вы можете сказать, что это «объект». 'SomeInterfaceCast'? Откуда эта информация предназначена? – spender

+0

«someInterfaceCast» - это интерфейс. Это позволит вам выявить определенные методы, которые вы ожидаете найти внутри созданного класса. Эта информация не приходит нигде, это просто ваше ожидание того, какие методы/свойства будет иметь экземпляр класса. –

2

Это должно быть решение:

var yourType= "yourType"; 
var theType = TheType.GetType(yourType, true); 
var variable = (yourTypeCast)Activator.CreateInstance(yourType); 
Смежные вопросы