Здравствуйте, VladD2, Вы писали:
VD>А как оформить обычные индексаторы с несколькими аргументами?
Да так же, только без this. Все точно так же, как с методами.
VD>Не ужели вам самим не ясно, что идея использовать синтаксис индексеров для описания чего-то отличного от индексеров — это плохая идея?
Индексеры — это те же свойства, только с параметрами. Я бы даже сказал, обычные свойства-члены — это индексеры, в которых один параметр (this) спрятан. В свойствах-расширениях он просто явный.
Давайте еще раз посмотрим на объявления методов и индексеров:
class C
{
// метод-член без параметровpublic Foo() : ReturnType { ... }
// метод-расширение без параметровstatic Foo(this self : C) : ReturnType { ... }
// метод-член с одним параметромpublic Foo(parm : Type1) : ReturnType { ... }
// метод-расширение с одним параметромstatic Foo(this self : C, parm : Type1) : ReturnType { ... }
// свойство-членpublic Foo : ReturnType { ... }
// свойство-расширениеpublic Foo[this self : C] : ReturnType { ... }
// свойство-член с одним параметром (индексер)public Foo[parm : Type1] : ReturnType { ... }
// свойство-ресширение с одним параметром (индексер)public Foo[this self : C, parm : Type1] : ReturnType { ... }
}
Разница (не считая скобок) между методами и свойствами/индексер одна — после свойства-члена Foo нету скобок.
Может мне только кажется, но синтаксиса логичнее (и менее "удивительного") не придумаешь.
Здравствуйте, catbert, Вы писали:
VD>>А как оформить обычные индексаторы с несколькими аргументами?
C>Да так же, только без this. Все точно так же, как с методами.
Я об обычных индексаторах-расширениях с несколькими аргументами.
VD>>Не ужели вам самим не ясно, что идея использовать синтаксис индексеров для описания чего-то отличного от индексеров — это плохая идея?
C>Индексеры — это те же свойства, только с параметрами.
Свойства с параметрами — это уже звучит глупо.
Индексеры — это индексеры. Закос на доступ по индексу к массивам.
C>Я бы даже сказал, обычные свойства-члены — это индексеры, в которых один параметр (this) спрятан. В свойствах-расширениях он просто явный.
Эдак можно договориться до чего угодно.
C> // свойство-расширение
C> public Foo[this self : C] : ReturnType { ... }
C> // свойство-член с одним параметром (индексер)
C> public Foo[parm : Type1] : ReturnType { ... }
C> // свойство-ресширение с одним параметром (индексер)
C> public Foo[this self : C, parm : Type1] : ReturnType { ... }
C>}
На мой взгляд — это совершено не очевидно.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Jack128, Вы писали:
J>а сейчас в N разрешено вызывать непосредственно геттеры/сеттеры свойств? Не extension, а обычных свойств?
Да. Причем эта багофича еще и полезна, так как позволяет легко превратить свойство в функцию ссылку на функцию. В интеллисенсе, это правда закрыто. Но если не полениться и дописать get_ вручную, то будет работать.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Тогда это будет и преемственно по синтаксису с текущей реализацией методов-расширений, и понятно, и просто в реализации.
Сам я этим не хочу заниматься, так как в ближайшее время, после выпуска релиза интеграции с VS 2010 хочу сесть за IKVM-бэкэнд. Эта фича нам сейчас нужна больше всего, на мой взгляд. Да и IT я уже ее пообещал.
Если кто-то хочет заняться реализацией свойств-расширений, то можете приступать. Я постараюсь помочь советами.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, _NN_, Вы писали:
VD>В общем, после обсуждения мое мнение такое. Если делать свойства-расширения, то синтаксис нужно выбирать наиболее простой и кондовый: VD>
А после реализации свойств, индексаторов и событий расширения, мы, при привязке оных к интерфейсам, фактически получим Сишные шаблоны с прилагающимся множественным наследованием. ^______^
Может, майкрософт потому и не торопится их реализовывать?
Здравствуйте, EqKeeper, Вы писали:
EK>А после реализации свойств, индексаторов и событий расширения, мы, при привязке оных к интерфейсам, фактически получим Сишные шаблоны с прилагающимся множественным наследованием. ^______^
Из чего это вытекает. Мне кажется у вас ложные предпосылки.
Шаблоны С++ — это средство обобщения кода во время компиляции и за одно система метапрограммирования. Наличие или отсутствие свойств тут мало что изменяет.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.