7 / 7 / 0
Регистрация: 05.04.2016
Сообщений: 408
1

Создать переменную типа, хранящегося в переменной типа Type

28.08.2017, 09:29. Показов 4273. Ответов 7
Метки нет (Все метки)

Здравствуйте.
Гугл не помог, потому обращаюсь за помощью к вам.
Пишу загрузку (не важно чего) из файла, данные хранятся в формате строки и, когда я считываю одно слово - оно является названием типа в моём приложении, после чего через Type.GetType(string typeName) я получаю сам тип (https://msdn.microsoft.com/ru-... .110).aspx), но возможно ли как то создать переменную этого типа? (это мне и надо)
если непонятно, то вот пример:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class someClass
{
 
}
class someClass1 : someClass
{
 
}
class someClass2 : someClass
{
 
}
//далее в главном коде
someClass neededClass = new (Type.GetType("someClass1"));
//так не работает, к сожалению. т.е. надо что б создавалась переменная типа, имя которого хранится в строке
Добавлено через 6 минут
О, придумал, наконец то, как адекватно сказать: мне нужно использовать содержимое строки как тип для создания экземпляра класса
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.08.2017, 09:29
Ответы с готовыми решениями:

Передача переменной типа double из c# в переменную типа float в SQL
Здравствуйте, имеется проблема с передачей данных из кода c# в бд SQL Имеется переменная типа...

Предполагается ли в C# синтаксис для создания переменной того типа, который указан в переменной Type type
Как это мне представляется: Type type = new double().GetType(); type a = 3.2; type b = 4.1;...

Как создать переменную типа int исспользуя в качестве имени значение строковой переменной.
есть переменная типа string в которой допустим хранится значение: "file001" как объявить\создать...

Записать адрес переменной произвольного типа в переменную типа int
Здравствуйте, есть структура __packed struct myStruct{ uint32 HisCh; uint32 sNo; uint16...

7
Эксперт .NET
9798 / 7168 / 1142
Регистрация: 21.01.2016
Сообщений: 27,258
28.08.2017, 09:41 2
Nordicus666, создать-то можно (через Activator.CreateInstance), но как вы дальше с данным объектом работать собрались? Ведь полученный объект будет типа Object и вам с ним или через рефлексию работать или приводить к нужному типу, а это значит, что нужно знать тип данного объекта.

Добавлено через 1 минуту
Количество типов во входном файле фиксировано? Или могут быть произвольные типы?
0
Администратор
Эксперт .NET
14504 / 11744 / 4744
Регистрация: 17.03.2014
Сообщений: 23,815
Записей в блоге: 1
28.08.2017, 09:44 3
Nordicus666, Type.GetType("...") ожидает полное имя типа - с пространством имен и именем сборки, если тип не в текущей сборке.
ypeName
Type: System.String

The assembly-qualified name of the type to get. See AssemblyQualifiedName. If the type is in the currently executing assembly or in Mscorlib.dll, it is sufficient to supply the type name qualified by its namespace.
0
293 / 233 / 58
Регистрация: 03.02.2011
Сообщений: 1,956
Записей в блоге: 1
28.08.2017, 11:23 4
Nordicus666, может так:\
C#
1
2
3
4
5
6
7
8
string someOuterVar = "someClass1";
            var myType = typeof(someClass);
            var n = myType.Namespace;
            string assemblyName = typeof(someClass).Assembly.GetName().Name;
 
 
            Type type = Type.GetType(n+"."+someOuterVar+", " + assemblyName);
            someClass someObject = Activator.CreateInstance(type) as someClass;
;
1
Эксперт .NET
9798 / 7168 / 1142
Регистрация: 21.01.2016
Сообщений: 27,258
28.08.2017, 11:27 5
skilllab, такое проканает, если все создаваемые объекты имеют общего предка и вся работа будет идти только через него.
0
293 / 233 / 58
Регистрация: 03.02.2011
Сообщений: 1,956
Записей в блоге: 1
28.08.2017, 14:04 6
Usaga, предок - это нэймспэс?

Добавлено через 2 минуты
Цитата Сообщение от Usaga Посмотреть сообщение
создать-то можно (через Activator.CreateInstance)
Цитата Сообщение от Usaga Посмотреть сообщение
а это значит, что нужно знать тип данного объекта
))) Из вашего сообщения: так как можно создать инстанс объекта и при этом НЕ знать типа?
0
Эксперт .NET
9798 / 7168 / 1142
Регистрация: 21.01.2016
Сообщений: 27,258
28.08.2017, 14:10 7
Цитата Сообщение от skilllab Посмотреть сообщение
предок - это нэймспэс?
Базовый класс или интерфейс.

Цитата Сообщение от skilllab Посмотреть сообщение
так как можно создать инстанс объекта и при этом НЕ знать типа?
С помощью Activator.CreateInstance. Но вот привести полученный Object к нужному типу уже не получится ибо на этапе компиляции мы о типе ничего не знаем. Можно, конечно, извернуться и продолжить эксплуатировать рефлексию: найти поле\свойство того же типа в нужном классе и присвоить вновь созданный объект этому полю. Но это дичь полная.
0
7 / 7 / 0
Регистрация: 05.04.2016
Сообщений: 408
28.08.2017, 17:09  [ТС] 8
Activator.CreateInstance помог, огромное спасибо, не знал, что такое есть вообще, очень удобно, что можно написать просто текущий namespace, затем точку, затем переменную типа string, содержащую имя класса и он тебе создаст экземпляр этого класса (разве что явное приведение сделать да и всё), буду теперь знать про такое. Ещё раз огромное спасибо, проблема решена.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.08.2017, 17:09
Помогаю со студенческими работами здесь

Перенос значения переменной типа Real в переменную типа Integer
Как сделать так чтобы переменная типа integer приняло число которое было в переменной типа real???

Как сравнить переменную типа String с переменной типа Int?
Как сравнить переменную типа String с переменной типа Int в конструкции "if"???

Перенос данных из переменной одного типа в переменную другого типа
Добрый день! Одна часть программы размещает полученные данные(символы) в ПЕРЕМ1 типа ustring ( или...

Получить из переменной типа uint32_t* переменную типа char*
Всем добрый день. Помогите получить из переменной типа uint32_t* переменную типа char*. Заранее...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru