He creado el vacío sanitario de muestreo Código:Conseguir objetivo de Acción
class Program {
static void Main(string[] args) {
var x = new ActionTestClass();
x.ActionTest();
var y = x.Act.Target;
}
}
public class ActionTestClass {
public Action Act;
public void ActionTest() {
this.Act = new Action(this.ActionMethod);
}
private void ActionMethod() {
MessageBox.Show("This is a test.");
}
}
Cuando hago esto de esta manera, y lo hará un objeto de tipo ActionTestClass (que se creó para x). Ahora, cuando cambio la línea
this.Act = new Action(this.ActionMethod);
a
this.Act = new Action(() => MessageBox.Show("This is a test."));
y (el destino de la acción) será nulo. ¿Hay alguna forma de que pueda obtener el objetivo (en la muestra, el objeto ActionTestClass) también en la forma en que uso una acción anónima?
Personalmente, no me sorprende que 'Action' no sepa nada sobre el 'ActionTestClass' que se refiere a eso. ¿Por qué lo haría? – AakashM
@AakashM: en el primer ejemplo está vinculando a un método de instancia, por lo que 'Target' no debe ser nulo. Sin embargo, esto podría no fallar debido a que no se usan variables de instancia. No creo que puedas vincularlo sin un 'Target' usando un constructor delegado. – leppie
@leppie lo siento, quería decir el segundo ejemplo: a diferencia del primer ejemplo, para la segunda "Acción" está claro por inspección que no tiene nada que ver con ningún objeto en particular, así que no estoy del todo sorprendido de que sea 'es' nulo'. ¿Debería estar esperando algo más? – AakashM