Как сделать общедоступные методы видимыми только в самом классе и классе, владеющем объектом в C #?

Мы с коллегой столкнулись с этим, когда пытались получить список вызовов делегата. Если вы создаете событие, скажем, в классе 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()
        {
        }
    }

Из любопытства, как вы этого добиваетесь и по какой причине эта функция доступна?

Большое спасибо Амит

8
задан user555265 4 January 2012 в 12:34
поделиться