consideran este código,¿En qué instancia de delegado de clase se invoca?
public class A
{
//...
void f()
{
B b = new B();
b.SomeEvent += this.SomeMethod;
}
void SomeMethod() {}
}
public class B
{
//...
public event SomeEventHandler SomeEvent;
void h()
{
if (SomeEvent != null)
{
SomeEvent.invoke();
}
}
}
En este fragmento de código, SomeEvent.invoke()
invoca realmente SomeMethod()
de clase A
. Así que en este punto, tengo algunas preguntas:
- En qué instancia de
A
,SomeMethod
se invoca? ¿Cómo sabeB
la instancia en la que se invocará el delegado? ¿Cómo funciona CLR aquí? - Además,
SomeMethod
es un método privado, entonces ¿cómo es queB
es capaz de invocar a este método desde fuera de la claseA
?
EDIT:
Después de leer las primeras respuestas, vine a saber que tiene una propiedad Delegate
Target
delegado en el que se invoca. Pero no podía entender exactamente en qué paso se establece esta propiedad Target
? ¿Quién lo configuró? Cuando escribo b.SomeEvent += this.SomeMethod;
, ¿establece la propiedad Target
también? ¿Cómo exactamente?
Finalmente una publicación ... esto me dice algo que estaba buscando. +1 – Nawaz