Мы с коллегой столкнулись с этим, когда пытались получить список вызовов делегата. Если вы создаете событие, скажем, в классе X, вы можете получить доступ к общедоступным методам события изнутри этого класса. Но (и, пожалуйста, не обращайте внимания на такие вещи, как, например, почему у вас должен быть открытый доступ к членам класса, это не то, о чем мы спрашиваем!), Если у нас есть класс Y, создающий экземпляр X и обращающийся к событию в X, он не может вызвать любой из общедоступных методов, таких как GetInvocationList () события. Мы хотели знать, как это работает. Вот пример кода (прочтите комментарии, чтобы понять, что мы имеем в виду):
public class X
{
public delegate void TestMethod();
public event TestMethod testMethod;
private void rubbish()
{
// can access testMethod.GetInvocationList() fine here
testMethod.GetInvocationList();
}
}
public class Y
{
public Y()
{
X x = new X();
x.testMethod += this.test;
// here it says testMethod can only appear on the left hand side of += or -=
// why is this? (i.e. the below line is invalid)
x.testMethod.GetInvocationList();
}
public void test()
{
}
}
Из любопытства, как вы этого добиваетесь и по какой причине эта функция доступна?
Большое спасибо Амит