Почему в C# нет делегатов для свойств?

6yrop

Например,

class MyClass
{
public string MyProperty{ get{...} set{...} }
public string MyMethod {...}
}

вот такое можно написать

MyDelegate Test
{
return new MyClass.MyMethod;
}

а вот так нельзя

MyPropertyDelegate Test
{
return new MyClass.MyProperty; //тут получается совпадение с вызовом
//свойства, но можно какое-нибудь
//ключевое слово придумать типа typeof
}

да и свойство-делегат можно вызывать как в качестве гетора, так и в качестве сетора :D .
Тогда бы можно было нормальный датабайндинг забабахать средствами самого сишарпа :) , и тогда вот вам и нормальный ителисенс, нормальная навигация по коду, рефакторинг, ну и вообще все прелести :)
Такое требуется не только в датабайндинге, но сейчас не вспомню
Как там с этим в других языках? в том же Немерле?

klyv

а чем тебе не нравится
return delegate { return MyProperty; };  
?

6yrop

return delegate { return MyProperty; };
фишка в том что хочется и гетор и сетор иметь, т.е. один раз передается нечто, и через это нечно можно дергать и сетор и геттор свойства. Хочется такую поддержку в самом языке, эмуляции выглядят громоздко.

agaaaa

И как это должно выглядеть по-твоему?

klyv

Идея интересная - только вот не реализована :)
Надо будет в Своём Языке сделать такое :)

6yrop

И как это должно выглядеть по-твоему?
как это сделать красивше и оптимальнее, разработчики языка должны подумать :) . Прямолинейный вариант может выглядить так.

public class Test
{
public PropertyDelegate<string> Test1
{
new MyClass.;
}
}

public class MyClass
{
public string MyProperty
{
get
{
throw new NotImplementedException;
}
set
{
throw new NotImplementedException;
}
}
}

public class PropertyDelegate<T>
{
private readonly Getter<T> getter;
private readonly Setter<T> setter;

public PropertyDelegate(Getter<T> getter, Setter<T> setter)
{
this.getter = getter;
this.setter = setter;
}

public T Value
{
get
{
return getter;
}
set
{
setter(value);
}
}
}

public delegate T Getter<T>

public delegate void Setter<T>(T t);

и компилятор собачку разворачивает вот в такое

public PropertyDelegate<string> Test1
{
MyClass myClass = new MyClass;
return new PropertyDelegate<string>(
delegate
{
return myClass.MyProperty;
},
delegate(string t)
{
myClass.MyProperty = t;
});
}

valkira

Можно было и без дженериков. :)

6yrop

Можно было и без дженериков.
напиши как
Оставить комментарий
Имя или ник:
Комментарий: