2012-01-17 4 views
-2

Я пытаюсь создать ряд объектов, но я бы каждый, как каждое имя объекта содержит строку вИспользование строки в имени объекта

string test = "test123" 
Form1 Form1Object<string goes here> = new Form1(selectedNodeText); 

Таким образом, название объекта будет

Form1Objecttest123 
+0

Это звучит очень необычно ... не могли бы вы рассказать нам больше, почему вам нужно это делать? Возможно, будет лучшее решение. –

+0

У меня есть цикл for, который создает несколько объектов класса (в зависимости от количества имен хостов, которые у меня есть - класс проверяет имя хоста). На данный момент все объекты называются Form1Object, но я бы предпочел иметь переменную hostname в пределах имени объекта, чтобы я мог легко различать объекты – Mike

+0

Майк, возможно, это может быть сделано с использованием emit, но это один из тех вопросов, когда, если вы его просите, вы делаете что-то неправильно. Подумайте, как будет выглядеть ваш код, и немного пожалейте парня, которому придется его поддерживать. Попытайтесь думать о другом способе делать то, что вы пытаетесь сделать. – linkerro

ответ

4

Это невозможно. Вы можете использовать словарь:

Dictionary<string, Form> forms = new Dictionary<string, Form>(); 
forms[test] = new Form1(selectedNodeText); 
+1

Это вполне возможно. Это огромная работа для абсолютно никакой пользы, но это возможно. –

0

Тип словаря - это путь. Использовать что-то вроде

Dictionary<string, object> list = new Dictionary<string, object>(); 
list.Add("test123", new Form1(selectedNodeText)); 
+0

Спасибо, но как бы я тогда вызвать это? – Mike

+0

, то вы могли бы назвать что-то вроде var yourObject = list ["test123"]; –

+0

, который будет возвращать объект типа Object. если вам нужен строго типизированный объект вашего типа, тогда объявите словарь

0

Это возможно. Если у вас есть ModuleBuilder объект, mb, то вы могли бы использовать:

mb.DefineType("Form1Objecttest123", TypeAttributes.Public, typeof(Form1)) 

Чтобы создать тип, который называется Form1Objecttest123 производный от Form1.

Тогда вы прилагаете огромные усилия, испуская любые члены, которые не просто извлекаются из него.

Это почти наверняка будет никакого ценности для вас, по сравнению с добавлением свойства имени, которое получает набор в конструкторе Form1 (или единственный класса, производного от него) и либо запрашивая за него, когда вы заботитесь, и/или переопределить ToString(), чтобы вернуть его.

Смежные вопросы