Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
// Nemerle
public Wrap[T](a : T) : List[T] { ... }
// C#
public List<T> Wrap<T>(T a) { ... }// Nemerle
def a : string = "...";
def a = "...";
// C#
string a = "...";
var a = "...";def a : int -> string = x => x.ToString();
class MyClass
{
[MyTransform]
public int Property { get; set;}
}
abstract class PropertyTransformAttribute<T>: Attribute
{
public string PropetyName { get; private set;}
public delegate void Setter(object self, ref T oldValue, T newValue);
public delegate T Getter(object self, T oldValue);
public virtual Expression<Setter> TransformSetter(Setter setter) { return setter; }
public virtual Expression<Getter> TransformGetter(Getter getter) { return getter; }
}
class MyTransformAttribute: TransformAttribute<int>
{
public override Expression<Setter> TransformSetter(Setter setter)
{
return (sender, ref oldValue, newValue) =>
{
if (oldValue == newValue) return;
oldValue = newValue;
((MyClass)sender).RaisePropertyChanged(PropertyName);
}
}
}
Асинхронное программирование и Computation Expressions