|
Каждому свое
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
|
|
Создание инстанса типа, который является generic16.10.2017, 20:02. Показов 9722. Ответов 19
Метки нет (Все метки)
Доброго времени суток. Скажите пожалуйста, я знаю, что мне не получится создать экземпляр класса T, где T - является generic параметром, к примеру, какого нибудь метода. Тоесть внутри этого метода, я не смогу создать инстанс типа T, если только не введу ограничение на
where T : new().А если у меня ограничение на какой-нибудь базовый класс Base, тоесть where T : Base, у которого конструктор имеет параметр, смогу ли я создавать экземпляры T?Компилятор ругается, но очень хотелось бы провернуть такую фишку...
0
|
|
| 16.10.2017, 20:02 | |
|
Ответы с готовыми решениями:
19
Использование byte[] как generic-типа Generic, определение типа переменной во время выполнения программы Объявление обобщённого типа (Generic) для стандартных целочисленных типов |
|
Каждому свое
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
|
|
| 16.10.2017, 21:09 [ТС] | |
|
Cupko, все равно нельзя создать
0
|
|
|
Каждому свое
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
|
||
| 16.10.2017, 21:40 [ТС] | ||
|
Cupko,
не...рефлекция...это долго, да и еще не статически типизировано Как же я скучаю по шаблонам C++...Спасибо, за ответы
0
|
||
|
Каждому свое
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
|
|
| 16.10.2017, 21:46 [ТС] | |
|
Cupko, ну рефлексия - это всегда долго
Поэтому согласен с людьми Да и еще раз повторюсь: это не статически типизировано
0
|
|
|
14321 / 9411 / 1356
Регистрация: 21.01.2016
Сообщений: 35,479
|
|
| 17.10.2017, 06:55 | |
|
Bretbas, в C# такой фишки нэма. Тут получается, что если вы знаете сигнатуру конструктора, то вы знаете и тип, которым параметризировали класс. Соответственно, обобщение теряет всякий смысл.
Если есть ну очень острое желание, то можно, надышавшись клеем, сотворить коллекцию фабрик принимающих на вход object[] и выдающих конкретные объекты T. И искать нужную фабрику по параметру дженерика. Оно даст, что вам надо (хоть и обходным путём) и не использует рефлексию, что быстро. Но всё равно это - конина какая-то. ![]() Добавлено через 5 минут Помните, что параметризация дженериков в .NET происходит в рантайме, потому их возможности сильно ограничены и рядом не стояли с С++, где всё это происходит на этапе компиляции и у компилятора вся информация на руках и он может вытворять всякое непотребство.
0
|
|
|
Каждому свое
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
|
|||
| 17.10.2017, 08:20 [ТС] | |||
|
Usaga,
Но параметры конструктора object[] как то тоже не сильно типизированы![]() where). По крайней мере у Java так, мне кажется все тоже самое на C#. C++ в этом случае гораздо мощнее, он знает на этапе компиляции и выполнения о типе T все, и ничего не срезает при выполнении. Тоесть от std::vector<T> останется std::vector<T>, а из этого все вытекающие - латентная типизация, создание инстансов, передача неопределенного числа параметров строго типизированно и тд
0
|
|||
|
677 / 479 / 216
Регистрация: 06.09.2013
Сообщений: 1,312
|
||||||
| 17.10.2017, 09:01 | ||||||
|
Bretbas, если вам нужен именно вызов конструктора с параметрами, то не сможете.
В одной конторе, где я работал было правило, по возможности избегать конструкторов с параметрами и писать метод типа "Initialize", которому параметры передаются для уже сконструированного объекта. Тогда, понятно, создание экземпляров объектов с нужными параметрами легко осуществлялось. Кликните здесь для просмотра всего текста
0
|
||||||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||||||||||||
| 17.10.2017, 09:56 | ||||||||||||
|
В таком случае передавайте в метод фабрику, которая будет создавать нужный экземпляр:
0
|
||||||||||||
|
911 / 796 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
|
||||||
| 17.10.2017, 10:02 | ||||||
0
|
||||||
|
Каждому свое
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
|
|||||||
| 17.10.2017, 18:17 [ТС] | |||||||
|
kolorotur,
И под каждый тип своя фабрика Не, так не пойдет![]() Я просто хотел узнать, можно ли сделать что-то типо такого на C#: (код C++)
0
|
|||||||
|
14321 / 9411 / 1356
Регистрация: 21.01.2016
Сообщений: 35,479
|
|
| 17.10.2017, 18:41 | |
|
Bretbas, чем этот пример отличается от
new и простого конструктора конкретного класса?
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||
| 17.10.2017, 18:52 | ||
|
В плюсах шаблоны — это по сути дела команды найти/заменить для компилятора, они существуют только в тексте программы. Компилятор их просто заменяет на соответствующие типы или перегрузки. В шарпе генерики — настоящие, они могут принимать в качестве типа-параметра даже такой, которого не существует на стадии компиляции, т.к. конкретный тип под указанный параметр генерируется на стадии выполнения. Потому и компилятор должен быть в состоянии дать гарантию, что после компиляции обобщенный тип или метод может работать с любым типом, подходящим под условия. Отсюда да, больше ограничений.
1
|
||
|
Каждому свое
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
|
||
| 17.10.2017, 19:01 [ТС] | ||
|
Usaga,
Create фабрики Factory, создать любой тип T, который наследует от Base, причем тип T может иметь любой конструктор, с аргументами, или без, без разницы. Лишь бы public только былВ C# такой можно реализовать, но через рефлексию однозначно, что долго. Да и при передаче параметров в Create на C# будет скорее всего передаваться param object[], что будет не статически типизировано
0
|
||
|
14321 / 9411 / 1356
Регистрация: 21.01.2016
Сообщений: 35,479
|
||
| 17.10.2017, 19:07 | ||
new, но с меньшим количеством кода. Фабрика подразумевает какой-то особый процесс создания объекта. Но обобщённая фабрика что может сделать особого для каждого отдельно взятого типа класса?
0
|
||
|
Каждому свое
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
|
|||||||||||
| 17.10.2017, 19:13 [ТС] | |||||||||||
|
Usaga, Вы имеете ввиду зачем писать так:
0
|
|||||||||||
|
14321 / 9411 / 1356
Регистрация: 21.01.2016
Сообщений: 35,479
|
||
| 17.10.2017, 19:14 | ||
|
Хотя такое и может быть полезно. Если создаваемые типы имеют общего предка, через интерфейс которого вновь созданный объект будет конфигурироваться фабрикой как-то. Может в этом что-то и есть.
Добавлено через 32 секунды
0
|
||
|
Каждому свое
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
|
|
| 17.10.2017, 19:15 [ТС] | |
|
Usaga,
0
|
|
| 17.10.2017, 19:15 | |
|
Помогаю со студенческими работами здесь
20
Создание инстанса ADOConnection
Создать объект generic типа Создание объекта в generic Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2.
Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
|
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2.
Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом.
В. . .
|
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2.
Задача: отобразить спецтехнику, которая на данный момент находится в ремонте.
Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
|
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
|
|
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
|
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут
Суть:
- Группа наркоманов из 10 человек.
- Только один инфицирован ВИЧ.
- Колются одной иглой.
- Колются раз в день.
- Колются последовательно через. . .
|
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
|
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
|