Para crear un delegado de un método que puede utilizar el tipo de fallos de sintaxis de compilación:Crear un delegado de un captador de propiedad o método setter
private int Method() { ... }
// and create the delegate to Method...
Func<int> d = Method;
Una propiedad es una envoltura alrededor de un captador y el método de selección, y Quiero crear un delegado para un método getter de propiedad. Algo así como
public int Prop { get; set; }
Func<int> d = Prop;
// or...
Func<int> d = Prop_get;
Lo que no funciona, desafortunadamente. Tengo que crear un método lambda independiente, que parece innecesario cuando el método de obtención coincide con la firma del delegado de todas formas:
Func<int> d =() => Prop;
Para utilizar el método delegado directamente, tengo que utilizar la reflexión desagradable, que es no compila con seguridad de tipos:
// something like this, not tested...
MethodInfo m = GetType().GetProperty("Prop").GetGetMethod();
Func<int> d = (Func<int>)Delegate.CreateDelegate(typeof(Func<int>), m);
¿hay alguna manera de crear un delegado en un método de obtener la propiedad directamente de un modo de compilación de seguridad, similar a la creación de un delegado en un método normal en la parte superior, sin necesidad de utilizar una método intermedio lambda?
¿Qué le pasa a la lambda? –
Es un método innecesario adicional, y hace las cosas más complicadas de lo necesario, ya que el getter de propiedad ya coincide con la firma del delegado – thecoop
No veo su punto aquí: un lambda no es un método de clase, sino una instancia de un delegado . Func d =() => Prop significa que mi delegado d "apunta" al acceso –