Re[13]: Свойства расширения
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.12.11 13:54
Оценка:
Здравствуйте, catbert, Вы писали:

_NN>>А свойства индексаторы как будут выглядеть?

_NN>>
_NN>>public static PropertyName[this x : Type1] [index : int] : Type2 { .. }
_NN>>


C>Так же, как и обычные индексаторы с несколькими аргументами (чем индексаторы-расширения, по сути, и являются):


C>
C>public static PropertyName[this x : Type1, index : int] : Type2 { .. }
C>


А как оформить обычные индексаторы с несколькими аргументами?

ЗЫ

Не ужели вам самим не ясно, что идея использовать синтаксис индексеров для описания чего-то отличного от индексеров — это плохая идея?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Свойства расширения
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.12.11 13:57
Оценка:
Здравствуйте, BogdanMart, Вы писали:

BM>в WPF исползуются AttachedEvent's как и AttachedProprty но нету поддержки сто тсороны С#, только с XAML


Ну и как тут помогут события-расширения?

Про Nemerle.WPF ты наверняка знаешь. Чем решение на макросах хуже?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: Свойства расширения
От: catbert  
Дата: 07.12.11 16:55
Оценка:
Здравствуйте, 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 нету скобок.
Может мне только кажется, но синтаксиса логичнее (и менее "удивительного") не придумаешь.
Re[15]: Свойства расширения
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.12.11 17:12
Оценка:
Здравствуйте, 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>}


На мой взгляд — это совершено не очевидно.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[16]: Свойства расширения
От: catbert  
Дата: 07.12.11 17:47
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>На мой взгляд — это совершено не очевидно.


Ну, раз неочевидно, значит нужно искать что-то другое
Re[9]: Свойства расширения
От: calc.exe Россия  
Дата: 08.12.11 04:36
Оценка:
Здравствуйте, _NN_, Вы писали:

__NN>А можно и макрос приделать для генерации

_NN>И даже квазицитаты новые не требуются.

_NN>
_NN>public static extension X : int (this m : MyClass) { get { m.Y + 1 } set { m.Y = value - 1 } }
_NN>


А разве макросы Nemerle 1.x позволяют менять синтаксис верхнего уровня?
.
Re[10]: Свойства расширения
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.12.11 19:36
Оценка:
Здравствуйте, calc.exe, Вы писали:

_NN>>
_NN>>public static extension X : int (this m : MyClass) { get { m.Y + 1 } set { m.Y = value - 1 } }
_NN>>


CE>А разве макросы Nemerle 1.x позволяют менять синтаксис верхнего уровня?


Позволяют. Но не очень гибко и с потерей интеллисенса.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Свойства расширения
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.12.11 19:39
Оценка:
Здравствуйте, Jack128, Вы писали:

J>а сейчас в N разрешено вызывать непосредственно геттеры/сеттеры свойств? Не extension, а обычных свойств?


Да. Причем эта багофича еще и полезна, так как позволяет легко превратить свойство в функцию ссылку на функцию. В интеллисенсе, это правда закрыто. Но если не полениться и дописать get_ вручную, то будет работать.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Свойства расширения
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.12.11 19:44
Оценка:
Здравствуйте, _NN_, Вы писали:

В общем, после обсуждения мое мнение такое. Если делать свойства-расширения, то синтаксис нужно выбирать наиболее простой и кондовый:
get_PropName(this arg : Type1) : Type2
{
  ...
}

set_PropName(this arg : Type1, value : Type2) : void
{
  ...
}


Тогда это будет и преемственно по синтаксису с текущей реализацией методов-расширений, и понятно, и просто в реализации.

Сам я этим не хочу заниматься, так как в ближайшее время, после выпуска релиза интеграции с VS 2010 хочу сесть за IKVM-бэкэнд. Эта фича нам сейчас нужна больше всего, на мой взгляд. Да и IT я уже ее пообещал.

Если кто-то хочет заняться реализацией свойств-расширений, то можете приступать. Я постараюсь помочь советами.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Свойства расширения
От: _NN_ www.nemerleweb.com
Дата: 12.12.11 15:02
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, _NN_, Вы писали:


VD>В общем, после обсуждения мое мнение такое. Если делать свойства-расширения, то синтаксис нужно выбирать наиболее простой и кондовый:

VD>
VD>get_PropName(this arg : Type1) : Type2 {}
VD>set_PropName(this arg : Type1, value : Type2) : void {}
VD>


VD>Тогда это будет и преемственно по синтаксису с текущей реализацией методов-расширений, и понятно, и просто в реализации.


Соответственно индексированные свойства это ?
get_PropName(this arg : Type1, index : int, ...)                : Type2 {}
set_PropName(this arg : Type1, index : int, ..., value : Type2) : void {}
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[3]: Свойства расширения
От: VladD2 Российская Империя www.nemerle.org
Дата: 12.12.11 22:05
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Соответственно индексированные свойства это ?

_NN>
_NN>get_PropName(this arg : Type1, index : int, ...)                : Type2 {}
_NN>set_PropName(this arg : Type1, index : int, ..., value : Type2) : void {}
_NN>


На индексаторы можно просто забить пока. А так... можно и так, можно и обычный синтаксис индексеров подхачить.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: Свойства расширения
От: EqKeeper  
Дата: 23.01.12 00:41
Оценка:
А после реализации свойств, индексаторов и событий расширения, мы, при привязке оных к интерфейсам, фактически получим Сишные шаблоны с прилагающимся множественным наследованием. ^______^
Может, майкрософт потому и не торопится их реализовывать?
Re[15]: Свойства расширения
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.01.12 08:23
Оценка:
Здравствуйте, EqKeeper, Вы писали:

EK>А после реализации свойств, индексаторов и событий расширения, мы, при привязке оных к интерфейсам, фактически получим Сишные шаблоны с прилагающимся множественным наследованием. ^______^


Из чего это вытекает. Мне кажется у вас ложные предпосылки.

Шаблоны С++ — это средство обобщения кода во время компиляции и за одно система метапрограммирования. Наличие или отсутствие свойств тут мало что изменяет.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.