Интероп вариантов в C#
От: hardcase Пират http://nemerle.org
Дата: 03.11.10 10:39
Оценка: 27 (2)
В связи с недавним обсуждением о том как плохо выставлять наружу public instance поля, да еще и в камальКейзе именованные предлагаю следующее решение.

На входе имеем:
variant X
{
| Foo { a : string; mutable b : int } 
}



На выходе:
abstract class X
{
    public sealed class Foo : X
    {
       private a : stirng;
       
       [VariantOptionField("a", 0)]
       public A : string { get { a } }

       private mutable b : int;
       
       [VariantOptionField("b", 1)]
       public B : int { get { b } set { b = value } }
       
       public this(a : string, b : int) { this.a = a; this.b = b; }
    }
}


Атрибут VariantOptionField содержит имя поля при объявлении а также его позицию.
Имя свойства генерируется по правилам макроса Accessor: _some____foo_bar -> SomeFooBar.
/* иЗвиНите зА неРовнЫй поЧерК */
Re: Интероп вариантов в C#
От: _FRED_ Черногория
Дата: 03.11.10 11:08
Оценка:
Здравствуйте, hardcase, Вы писали:

H>В связи с недавним обсуждением о том как плохо выставлять наружу public instance поля, да еще и в камальКейзе именованные предлагаю следующее решение.


Спасибо за предложение

H>На входе имеем:

H>variant X
H>{
H>| Foo { a : string; mutable b : int } 
H>}


А почему не
variant X
{
| Foo { A : string; mutable B : int } 
}


По историческим причинам? OK. Только давайте, что бы можно было бы и так как я написать и имя параметра (и имя поля) получилось бы в камэлКейс?

H>На выходе:

H>abstract class X
H>{
H>    public sealed class Foo : X
H>    {
H>       private a : string;
       
H>       [VariantOptionField("a", 0)]
H>       public A : string { get { a } }

H>       private mutable b : int;
       
H>       [VariantOptionField("b", 1)]
H>       public B : int { get { b } set { b = value } }
       
H>       public this(a : string, b : int) { this.a = a; this.b = b; }
H>    }
H>}


Кстати, но я бы концевым параметрам конструктора, соответствующим изменяемым полям/свойствам в конструкторе указал бы значения по-умолчанию:
H>       public this(a : string, b : int = 0) { this.a = a; this.b = b; }
Help will always be given at Hogwarts to those who ask for it.
Re: Интероп вариантов в C#
От: _FRED_ Черногория
Дата: 03.11.10 11:09
Оценка:
Здравствуйте, hardcase, Вы писали:

H>В связи с недавним обсуждением о том как плохо выставлять наружу public instance поля, да еще и в камальКейзе именованные предлагаю следующее решение.


Кстати, то же (свойства/case) надо продумать и для Records.
Help will always be given at Hogwarts to those who ask for it.
Re[2]: Интероп вариантов в C#
От: hardcase Пират http://nemerle.org
Дата: 03.11.10 11:22
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>Кстати, то же (свойства/case) надо продумать и для Records.


Records — это что?
/* иЗвиНите зА неРовнЫй поЧерК */
Re[3]: Интероп вариантов в C#
От: _FRED_ Черногория
Дата: 03.11.10 11:26
Оценка:
Здравствуйте, hardcase, Вы писали:

_FR>>Кстати, то же (свойства/case) надо продумать и для Records.


H>Records — это что?


  [Record]
  public class Identifier : Located
  {
    [Accessor] Id : string;
    public override ToString() : string
    {
      id
    }
  }


Тут следует применить ту же логику, что и с вариантами.
Help will always be given at Hogwarts to those who ask for it.
Re[4]: Интероп вариантов в C#
От: hardcase Пират http://nemerle.org
Дата: 03.11.10 11:33
Оценка:
Здравствуйте, _FRED_, Вы писали:

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


_FR>>>Кстати, то же (свойства/case) надо продумать и для Records.


H>>Records — это что?


_FR>
_FR>  [Record]
_FR>  public class Identifier : Located
_FR>  {
_FR>    [Accessor] Id : string;
_FR>    public override ToString() : string
_FR>    {
_FR>      id
_FR>    }
_FR>  }
_FR>


_FR>Тут следует применить ту же логику, что и с вариантами.


Зачем? Макрос [Accessor] какраз генерирует свойство для поля.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[5]: Интероп вариантов в C#
От: _FRED_ Черногория
Дата: 03.11.10 11:37
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Зачем? Макрос [Accessor] какраз генерирует свойство для поля.


Тогда пардон Значит я не правильно понял
Автор: VladD2
Дата: 03.11.10
.
Help will always be given at Hogwarts to those who ask for it.
Re: Интероп вариантов в C#
От: _nn_ www.nemerleweb.com
Дата: 03.11.10 13:46
Оценка: +2
Здравствуйте, hardcase, Вы писали:

H>В связи с недавним обсуждением о том как плохо выставлять наружу public instance поля, да еще и в камальКейзе именованные предлагаю следующее решение.


Почему не наоборот, пишем UpperCase, а имя поле генерируется в _lowerCase ?

На входе
variant X
{
  | Foo { A : string; mutable b : int }
}


На выходе
abstract class X
{
    public sealed class Foo : X
    {
       private _a : string;
       
       [VariantOptionField("_a", 0)]
       public A : string { get { _a } }

       private mutable _b : int;
       
       [VariantOptionField("_b", 1)]
       public b : int { get { _b } set { b = value } }
       
       public this(a : string, b : int) { this._a = a; this._b = b; }
    }
}


P.S.
Тег [ nemerle ] работает
http://rsdn.nemerleweb.com
http://nemerleweb.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.