Todos sabemos que las propiedades en C # se compilan con métodos antiguos simples y reales. Pero a diferencia del método (-group) s, no se pueden dar como argumentos a otros métodos que esperan un delegado como a Func<T>o Action<T>(getter y setter). ¿Hay algo especial que lo prohíba, o es solo una característica que no vino "gratis" cuando los grupos de métodos se convirtieron implícitamente en delegados?
Código de ejemplo:
public class MyClass
{
public static int X { get; set; }
}
private static void Foo<T>(Func<T> f)
{
Console.WriteLine(f());
}
private static void Bar<T>(Action<T> f)
{
f(default(T));
}
private static void Test()
{
// neither of these lines compile, even with an explicit type-cast.
Foo(MyClass.X);
Bar(MyClass.X);
}
Si tuviera que adivinar, diría que no valía la pena resolver el problema sintáctico de diferenciar entre invocaciones y referencias a la propiedad en sí, cuando simplemente podemos hacer la falta adicional de escritura () => MyClass.Xo x => MyClass.X = x.
setes un Actiony getes un Funcpor ejemplo
delegate {return SomeProperty}pasa getter; delegate(YourType value) {SomeProperty = value}pasa setter. Si solo necesita pasar uno o dos lugares, esta es una forma abreviada de los métodos ajustados que de otro modo crearía.
Interfacecon esa propiedad y cambiar la firma del método llamado para tomar esa interfaz como parámetro.