Accessor vs. Property
От: _nn_ www.nemerleweb.com
Дата: 28.03.10 13:49
Оценка:
[Record]
class AB1
{
  [Accessor]
  _a : int;
  
  [Accessor]
  _b : string;
}


[Record]
class AB2
{
  A : int { get; private set; }
  
  B : string { get; private set; }
}


[Record]
class AB3
{
  A : int { get; }
  
  B : string { get; }
}


AB1 и AB2 компилируются, но в первом варианте нет свойства set, а во втором есть.
Третий вариант явно показывает что нужно, но не компилируется.
Есть ли возможность добавить его ?
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: Accessor vs. Property
От: Don Reba Канада https://stackoverflow.com/users/49329/don-reba
Дата: 28.03.10 15:10
Оценка:
Здравствуйте, _nn_, Вы писали:

__>AB1 и AB2 компилируются, но в первом варианте нет свойства set, а во втором есть.


Если нужен set, то пишется:
[Record]
class AB1
{
    [Accessor flags=WantSetter]
    _a : int;

    [Accessor flags=WantSetter]
    _b : int;
}
Ce n'est que pour vous dire ce que je vous dis.
Re[2]: Accessor vs. Property
От: Аноним  
Дата: 28.03.10 15:38
Оценка:
Здравствуйте, Don Reba, Вы писали:

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


__>>AB1 и AB2 компилируются, но в первом варианте нет свойства set, а во втором есть.


DR>Если нужен set, то пишется:

Как раз наоборот, нужно без set вообще. Только get.
Re: Accessor vs. Property
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.03.10 16:10
Оценка:
Здравствуйте, _nn_, Вы писали:

__>
__>[Record]
__>class AB3
__>{
__>  A : int { get; }  
__>  B : string { get; }
__>}
__>


__>Третий вариант явно показывает что нужно, но не компилируется.


Так что нужно то? Что он показывает?

__>Есть ли возможность добавить его ?


Что добавить то? Объясни подробнее.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Accessor vs. Property
От: hardcase Пират http://nemerle.org
Дата: 28.03.10 17:10
Оценка: +1
Здравствуйте, Аноним, Вы писали:


А>Как раз наоборот, нужно без set вообще. Только get.



А как же тогда установить начальное значение?
/* иЗвиНите зА неРовнЫй поЧерК */
Re[4]: Accessor vs. Property
От: _nn_ www.nemerleweb.com
Дата: 29.03.10 12:46
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Здравствуйте, Аноним, Вы писали:



А>>Как раз наоборот, нужно без set вообще. Только get.



H>А как же тогда установить начальное значение?


Для этого и есть Record.

Код
[Record]
class AB1
{
  _a : int;
  public A : int { get { _a; } }
  
  _b : string;
  public B : int { get { _b; } }
}


Аналогичен
[Record]
class AB1
{
  [Accessor]
  _a : int;
  
  [Accessor]
  _b : string;
}


Было бы более ясным ввести автоматические свойства только для чтения и тогда код мог бы выглядеть так:
[Record]
class AB3
{
  A : int { get; }
  
  B : string { get; }
}
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[5]: Accessor vs. Property
От: hardcase Пират http://nemerle.org
Дата: 29.03.10 13:14
Оценка:
Здравствуйте, _nn_, Вы писали:


__>Было бы более ясным ввести автоматические свойства только для чтения и тогда код мог бы выглядеть так:

__>
__>[Record]
__>class AB3
__>{
__>  A : int { get; }
  
__>  B : string { get; }
__>}
__>



Т.е. предлагаешь генерировать поле даже для неабстрактных свойств с единственным пустым get-тером?
А как их называть?
/* иЗвиНите зА неРовнЫй поЧерК */
Re[6]: Accessor vs. Property
От: _nn_ www.nemerleweb.com
Дата: 29.03.10 13:47
Оценка:
Здравствуйте, hardcase, Вы писали:

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



__>>Было бы более ясным ввести автоматические свойства только для чтения и тогда код мог бы выглядеть так:

__>>
__>>[Record]
__>>class AB3
__>>{
__>>  A : int { get; }
  
__>>  B : string { get; }
__>>}
__>>



H>Т.е. предлагаешь генерировать поле даже для неабстрактных свойств с единственным пустым get-тером?

H>А как их называть?

Также и называть, добавляя подчеркивание и начиная с маленькой буквы.
Обычно код получается или через autoproperty — public A : int { get; set; } и тут без разницы как называется поле или делается поле _someName и public A : int { get { _someName } } и тут тоже особо без разницы как поле называется.
Это очень удобно для неизменяемых классов, код короче и понятней.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[5]: Accessor vs. Property
От: VladD2 Российская Империя www.nemerle.org
Дата: 29.03.10 16:37
Оценка:
Здравствуйте, _nn_, Вы писали:

H>>А как же тогда установить начальное значение?


__>Для этого и есть Record.


Ты разберись все же что к чему.

Record создает конструктор для полей типа. Поля могут быть заданы явно или созданы автоматически при использовании автосвойсвт (ну, или другими макросами, но этот случай сейчас не рассматривается).

__>Было бы более ясным ввести автоматические свойства только для чтения и тогда код мог бы выглядеть так:

__>
__>[Record]
__>class AB3
__>{
__>  A : int { get; }
  
__>  B : string { get; }
__>}
__>


Это бессмысленный код. Хочешь иметь неизменяемые поля и эксесоры к ним — используй метатрибут Accessor.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Accessor vs. Property
От: hardcase Пират http://nemerle.org
Дата: 29.03.10 18:38
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Это бессмысленный код. Хочешь иметь неизменяемые поля и эксесоры к ним — используй метатрибут Accessor.


Смысл все же есть, но вот старик Оккам был бы недоволен.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[7]: Accessor vs. Property
От: VladD2 Российская Империя www.nemerle.org
Дата: 29.03.10 18:52
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Смысл все же есть, но вот старик Оккам был бы недоволен.


И в чем этот смысл?

Мне вообще не нравится что побочные эффекты работы одного макроса влияют на функциональность другой фичи языка.

Ведь если реализовать данное сомнительное новшество, то окажется, что использовать его без макроса Record попросту невозможно, так как поля генерируемые для автосвойств в гражданском коде недоступны (в следствии авлфа-переименования).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.