Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.59/34: Рейтинг темы: голосов - 34, средняя оценка - 4.59
7 / 7 / 0
Регистрация: 05.04.2016
Сообщений: 410

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

28.08.2017, 09:29. Показов 6380. Ответов 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.08.2017, 09:29
Ответы с готовыми решениями:

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

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

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

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

Добавлено через 1 минуту
Количество типов во входном файле фиксировано? Или могут быть произвольные типы?
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18242 / 14156 / 5366
Регистрация: 17.03.2014
Сообщений: 28,846
Записей в блоге: 1
28.08.2017, 09:44
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
 Аватар для skilllab
296 / 236 / 58
Регистрация: 03.02.2011
Сообщений: 2,045
Записей в блоге: 1
28.08.2017, 11:23
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
 Аватар для Usaga
14093 / 9310 / 1349
Регистрация: 21.01.2016
Сообщений: 34,969
28.08.2017, 11:27
skilllab, такое проканает, если все создаваемые объекты имеют общего предка и вся работа будет идти только через него.
0
 Аватар для skilllab
296 / 236 / 58
Регистрация: 03.02.2011
Сообщений: 2,045
Записей в блоге: 1
28.08.2017, 14:04
Usaga, предок - это нэймспэс?

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

Цитата Сообщение от skilllab Посмотреть сообщение
так как можно создать инстанс объекта и при этом НЕ знать типа?
С помощью Activator.CreateInstance. Но вот привести полученный Object к нужному типу уже не получится ибо на этапе компиляции мы о типе ничего не знаем. Можно, конечно, извернуться и продолжить эксплуатировать рефлексию: найти поле\свойство того же типа в нужном классе и присвоить вновь созданный объект этому полю. Но это дичь полная.
0
7 / 7 / 0
Регистрация: 05.04.2016
Сообщений: 410
28.08.2017, 17:09  [ТС]
Activator.CreateInstance помог, огромное спасибо, не знал, что такое есть вообще, очень удобно, что можно написать просто текущий namespace, затем точку, затем переменную типа string, содержащую имя класса и он тебе создаст экземпляр этого класса (разве что явное приведение сделать да и всё), буду теперь знать про такое. Ещё раз огромное спасибо, проблема решена.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.08.2017, 17:09
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru