|
Заблокирован
|
|
Создать новый объект того же типа, что существующий объект неизвестного типа31.07.2020, 16:00. Показов 5049. Ответов 47
Метки нет (Все метки)
Можно ли создать новый объект того же типа, что существующий объект неизвестного типа?
Есть некий объект obj1 Нужно создать новый объект obj2 того же типа. При этом будем считать, что сигнатура конструктора известна. Теоретически, получив из obj1 экземпляр типа System.Type, то бишь, obj1.GetType() и зная все типы, к которым может быть отнесен объект obj1, проведя операции сравнения с использованием typeof() от всех этих типов, наверное, это можно сделать. А можно как-то покороче? P.S. мы знаем, что что все возможные типы этого объекта являются потомками одного класса-родителя.
0
|
|
| 31.07.2020, 16:00 | |
|
Ответы с готовыми решениями:
47
Можно ли привести объект неизвестного типа к нужному по его имени? Не удаётся создать безымянный объект типа vector моего типа Интерфейс, в методе которого создается объект типа IDictionary и возвращается ссылка на этот объект |
|
Заблокирован
|
||
| 31.07.2020, 16:17 [ТС] | ||
|
Меня бы, наверное, вот такой вариант этого метода устроил - CreateInstance(Type, Object[]) Сейчас проверю.
0
|
||
|
14093 / 9310 / 1349
Регистрация: 21.01.2016
Сообщений: 34,980
|
||
| 31.07.2020, 16:24 | ||
Activator.CreateInstance вам не поможет.
0
|
||
|
Заблокирован
|
|||
| 31.07.2020, 16:28 [ТС] | |||
Я пока увидел другую проблему - с пом Activator.CreateInstance создается объект типа objeсt, а не нужного типа.
0
|
|||
|
14093 / 9310 / 1349
Регистрация: 21.01.2016
Сообщений: 34,980
|
|||
| 31.07.2020, 16:29 | |||
|
0
|
|||
|
Заблокирован
|
|
| 31.07.2020, 16:32 [ТС] | |
|
0
|
|
|
14093 / 9310 / 1349
Регистрация: 21.01.2016
Сообщений: 34,980
|
|
| 31.07.2020, 16:34 | |
|
titan4ik, приведение к желаемому типу. Только тут встаёт вопрос: если вы этот тип знаете, то что мешает создать его руками?
0
|
|
|
Заблокирован
|
|||
| 31.07.2020, 16:46 [ТС] | |||
![]() Добавлено через 5 минут объект есть. А типа я не знаю. И поэтому не могу привести. Вот такие условия. Или это глупость? Может и глупость. Но мне казалось, что если есть объект, то "умный компутер" должен знать о нем всё, включая тип - есть же obj1.GetType() . И соответственно, есть способ создания тут же нового объекта данного типа.
0
|
|||
|
1845 / 1187 / 501
Регистрация: 14.10.2018
Сообщений: 3,207
|
||
| 31.07.2020, 19:13 | ||
GetMethods. Реально - да, стоит ли оно того - решать вам.Возникает вопрос - почему так сложно - потому что дело обстоит в рантайме, и заранее неизвестно что у нас за тип такой, и чтобы не словить эксепшен - приходиться делать все эти выкрутасы.
0
|
||
|
Модератор
|
|||||||||
| 01.08.2020, 13:51 | |||||||||
|
Но такая задача лишена смысла. Наверняка вам требуется не ЛЮБОЙ неизвестный тип, а какой-то из допустимых типов. Добавлено через 3 минуты Но нужно уточнение, нужно создание НОВОГО объекта того же типа или нового объекта КОПИИ существующего? Добавлено через 2 минуты
0
|
|||||||||
|
Заблокирован
|
|||
| 01.08.2020, 15:22 [ТС] | |||
|
Для простоты можно считать, что у данного класса есть конструктор без параметров.
0
|
|||
|
Заблокирован
|
|||
| 01.08.2020, 15:47 [ТС] | |||
|
Для простоты можно считать, что мы знаем, что у этого класса есть конструктор без параметров.
0
|
|||
|
Модератор
|
|||
| 01.08.2020, 15:54 | |||
object и дальше с ним ничего делать не сможете.Или полностью работать с ним через рефлексию, что крайне не эффективно и применяется в исключительных случаях. Это всё равно, что сказать "хочу создать программу в общем виде для решения любой задачи". Добавлено через 4 минуты Activator.CreateInstance(...).Но толку? Получили объект и что с ним делать? Чтобы что-то делать с ним нужны его члены. В конкретной задаче нужны конкретные методы, свойства, поля. Соответственно они должны быть прописаны или в общем базовом классе или в интерфейсах. Тогда можно будет привести полученный object к нужному типу и использовать его для выполнения задачи.
0
|
|||
|
Заблокирован
|
||||||
| 01.08.2020, 16:05 [ТС] | ||||||
|
Я понял, что вы высказались поспешно. На самом деле - не можно.
0
|
||||||
|
Модератор
|
||
| 01.08.2020, 16:23 | ||
|
Можно - это значит МОЖНО. Просто я не могу понять, что вы хотите потом с этим объектом делать? Вот вы получили новый объект object obj = Activator.CreateInstance(...);.Дальше что? Да можно получить его члены через рефлексию. Допустим, вывести названия и значения всех свойств или полей. Если вы делаете что-то типа редактора с окном "Свойства" объекта - это имеет смысл. Будет таблица с названиями и в которой вы сможете смотреть и изменять значения свойств. Какое ещё может применение для этой информации? Можно используя её сделать кастомный аналого привязок используемых в WPF. Пример: Разъяснение PropertyDescriptor: Почему в некоторых случаях Binding правильно работает без INPC (INotifyPropertyChanged)? Что ещё? "Можно ли сделать транспортное средство?" - Конечно, можно! Но какое? "Меня интересует в общем виде." - Как это в общем? Чтобы и землю на даче таскать и на луну лететь? "А, ну, значит нельзя. Я понял, что вы высказались поспешно. На самом деле - не можно." - ....??? !!!
0
|
||
|
Заблокирован
|
|||
| 01.08.2020, 16:57 [ТС] | |||
|
С этим всё ясно стало много выше вашего вступления в тему. "В общем виде" - эта формулировка касалась вашего вопроса о том, знает ли мы, что у объектов есть один родительский класс. Имелось ввиду, что нет - не знаем. Спасибо за участие в обсуждении.
0
|
|||
|
Модератор
|
|||||||
| 01.08.2020, 17:09 | |||||||
object - это тип ПЕРЕМЕННОЙ.А тип ОБЪЕКТА, тот который задан в параметрах CreateInstance.
object может хранить ссылку на любой объект.Но чтобы использовать этот объект, надо знать что у него за тип. Поэтому "создать объект заданного типа" - это ЧАСТЬ задачи. И без второй части "чтобы таким-то образом можно было этот объект использовать" - эту задачу не решить. Не потому, что её НЕВОЗМОЖНО решить, а потому, что СЛИШКОМ МНОГО ВАРИАНТОВ решения, но каждое из них не может быть АБСОЛЮТНО УНИВЕРСАЛЬНО. Так же как и с транспортным средством. МОЖНО создать транспортное средство под любое конкретное применение, но НЕЛЬЗЯ создать абсолютно универсальное транспортное средство.
0
|
|||||||
| 01.08.2020, 17:09 | |
|
Помогаю со студенческими работами здесь
20
Объект типа Объект.Использование - не всегда реален. Создать объект generic типа Как в методе создать объект типа? Как создать объект типа KeyEventArgs Как создать объект типа структура на ASP? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Рецензия / Мнение/ Перевод
https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs
. . .
|
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
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|