#0
by Ненавижу 1С
Почему вот так можно class A<T> where T:MyClass,new а так нет class A<T> where T:MyClass,new(int) Вопрос больше теоретический почему создатели не стали такое (конструктор с параметрами) допускать? Тоже самое в Delphi, только так можно: A<T:MyClass,constructor>=class
#1
by DmitrO
и снова "переходите на с++, там это реализовано" :) class MyClass { public: MyClass(int n) {}; }; template<typename T> class А { T* foo { return new T; }; };
#3
by DmitrO
единственное что я не понял: почему ты пытаешься описать вызов конструктора в объявлении шаблонного класса (A), а не в том месте, где собственно и нужно сделать вызов этого самого конструктора для создания экземпляра класса MyClass.
#6
by DmitrO
у тебя же вот это: where T:MyClass уже означает что Т может быть либо непосредственно MyClass либо его наследник?
#7
by DmitrO
по документации where T : new означает: "Аргумент типа должен иметь открытый конструктор без параметров."
#9
by Кириллка
молодец, прочитал про различия class/object :) where - это же ограничение <типа>, а разве конструктор с параметром является <типом>?
#12
by Ненавижу 1С
правильно убрать, тогда вызов конструктора T будет невозможен в generic-классе одно из отличий template от generic
#15
by Ненавижу 1С
указать компилятору, что да, подсунутый класс-параметр будет реально иметь конструктор без параметра если вы подсунете в качестве параметра класс без такого конструктора, то будет ошибка компиляции: namespace ConsoleApplication1 { class Program { static void Main(string[] args) { A<B> a = new A<B>; //ошибка, нет такого конструктора } } public class A<T> where T : new { } public class B { public B(int x) { } } }
#16
by Ненавижу 1С
имени мало, тип класс обладает еще набором сигнатур методов, свойств и конструкторов вот эта вся совокупность и есть тип класс
#17
by Ненавижу 1С
+ Тип данных определяет множество значений, набор операций, которые можно применять к таким значениям и, возможно, способ реализации хранения значений и выполнения операций.
#19
by Ненавижу 1С
в кстати не копипаст, это мой ответ ответ на ваши высказывания а вообще ушли в сторону
#20
by DmitrO
а так? public class MyClass { public MyClass(int n) { } } public class A<T> //where T: new { public void foo { //T item = new T; // CS0304 Type t = typeof(T); Type[] at = {typeof(int)}; object[] ap = { 56 }; T item = (T)t.GetConstructor(at).Invoke(ap); } }
#21
by Ненавижу 1С
не люблю я рефлексию, приходится "внутро" лезть а если такого конструктора не будет, тогда исключение?
#22
by DmitrO
ну наверняка исключение, и похоже оно в рантайме будет а в с++ оно было бы в дизайн тайме, при инстанцировании шаблона. Вот поэтомц я и не понимаю в чем смысл ограничения типа параметра шаблона на конструктор по умолчанию (where T: new).
#23
by DmitrO
вероятно от того что инстанцирование шаблона идет в рантайме, ну не совсем в рантайме, а как там у вас, при запуске программы при CLR компиляции.
#24
by DmitrO
хотя нет.. тогда получается, что компилятор C# создаст явно не работающую программу, это врядли.. значит инстанцирование идет именно непосредственно в рантайме. я просто не знаю точно как там компиляция идет..
Тэги: Математика и алгоритмы
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
В этой группе 1С
- выпадающее меню при нажатии на кнопку
- Контекстное меню к программно созданой картинки
- v8: УПП 1.2.32 Проблема с документом "Начисление з/п сотрудникам организации"
- Ошибка SDBL при обновлении
- v8: УПП. Инструкции пользователей
- Из запроса в запрос
- Есть ли стандартная обработка свертки базы 1С 7.7 УСН ?
- Работа с Word из 1С
- VBS скрипт изменение картинки
- УТ 10.3 Приходный кассовый ордер
- РБП в отражении ЗУП 2.5.27.6
- Как настроить динамический список
- ЗУП: Как оформить повышение квалификации с отрывом от работы ?
- Диалог выбора папки и открытие папки из документа 1С
- Как узнать, в какой табличной части расположено поле ввода
- Не добавляется план обслуживания в SQL
- Вопрос по ведомости амортизации по НУ vs оборотка...
- Как в УТП добится чтобы формировались проводки по РН Товары на складах?
- СКД. Не получается программно запретить вывод отдельных полей
- Конвертация данных: перенос периодических реквизитов