c# ramblings
Dec. 15th, 2009 10:37 amпочему в интерфейсе не может быть конструкторов? аррргх.
насчет “в языке нету синтаксиса” – делается на раз-два. ISomeType something= new<ISomeType> typeVariable(arg, arg2, arg3), например. И статический чекинг, и все тут, и не конфликтует ни с чем.
без синтаксиса делается тоже на раз-два, либо фабриками, либо рефлекшеном, но некрасиво это :/
У меня ностальгия по питоновой общности между constructors, factories и вообще callables…
no subject
Date: 2009-12-15 08:48 am (UTC)no subject
Date: 2009-12-15 08:55 am (UTC)Аналогично new() constraint, вот только с произвольным набором параметров.
no subject
Date: 2009-12-15 08:56 am (UTC)только это не для интерфесов, а скорее для трейтов фича...
no subject
Date: 2009-12-15 09:16 am (UTC)no subject
Date: 2009-12-15 09:22 am (UTC)я думал Scala traits поддерживают такую фичу, как ты хотел... но оказывается нет.
для меня трейт был "статическим требованием на тип: т.е. списком методов с сигнатурами, которые класс обязан объявлять"
но тогда непонятно, чем это отличается от констрейнтов...
no subject
Date: 2009-12-15 09:33 am (UTC)у меня пока были два определения:
- "трейт - это такой навороченный тип" (например, типу-группе неплохо бы иметь не только бинарную операцию, а и ноль там, единицу, ...)
- "трейт - это штука, которая позволяет расширить значение типа определенными свойствами". но теперь я думаю что это то ли mixin то ли вообще монада (если трейт может являться прокси-обьектом, как например здесь http://code.enthought.com/projects/traits/ )
короче, каша в голове у меня.
no subject
Date: 2009-12-15 09:35 am (UTC)no subject
Date: 2009-12-15 11:29 pm (UTC)no subject
Date: 2009-12-15 11:28 pm (UTC)no subject
Date: 2009-12-15 10:18 am (UTC)* Свойства могут быть использованы как фиксированые свойства (т.е без использования класса свойств в качестве шаблонных параметров)
* Параметры свойств имеют обычно есстественные значения по умолчанию (которые крайне редко переопределяются) или вообще не могут быть переопределены.
* Параметры свойств имеют тенденцию к сильной зависимости от одного или нескольких основных параметров.
* Свойства обычно содержат типы и константы, а не функции-члены.
* Свойства имеют тенденцию к агрегации в шаблоны свойств.
(C) Джоасатис & Водервурд - Шаблоны С++, Классы Свойств и Стратегий.
no subject
Date: 2009-12-15 09:51 am (UTC)Зачем?
no subject
Date: 2009-12-15 10:00 am (UTC)no subject
Date: 2009-12-15 04:06 pm (UTC)Вводить метод construct и фабрики, и усложнять пространство состояний, рискуя получить недоинициализированный обьект - не хочется как-то.
no subject
Date: 2009-12-15 06:19 pm (UTC)Можно требовать необходимый конструктор в рантайм.
no subject
Date: 2009-12-15 07:10 pm (UTC)А насчет не очень частый... ну... удобно же! :)
no subject
Date: 2009-12-16 10:22 am (UTC)no subject
Date: 2009-12-15 11:18 pm (UTC)+ констрейнты на конструкторы с аргументами.
+ трейты.
+ тайпклассы.
А ещё таблеток от жадности.
no subject
Date: 2009-12-15 11:23 pm (UTC)no subject
Date: 2009-12-15 11:38 pm (UTC)no subject
Date: 2009-12-22 01:35 am (UTC)no subject
Date: 2009-12-22 10:39 am (UTC)точнее, между метаклассом, классом и factory.
в этом смысле static virtual - это всего лишь virtual у метакласса :)
no subject
Date: 2009-12-22 10:46 am (UTC)no subject
Date: 2009-12-15 11:34 pm (UTC)no subject
Date: 2009-12-22 01:30 am (UTC)по существу: пример не понял. что такое typeVariable?
no subject
Date: 2009-12-22 10:37 am (UTC)typeVariable - переменная типа System.Type, которую хочется инстанцировать динамически, но чтобы факт наличия конструктора с нужными параметрами проверялся компилятором статически, на основании информации о типе, указанной в new<>
no subject
Date: 2009-12-22 10:41 am (UTC)