Почему оператор присваивания делегата .net не присваивает ссылку исходному делегату? - PullRequest
1 голос
/ 14 июня 2011

Почему copyOfDelegate является копией исходного делегата, а не справочной копией исходного?

    public class DelegateTester
    {
        public delegate void PrintDelegate();

        public PrintDelegate PrintCallback;
    }

    public class Client
    {
        public void Print()
        {
            Console.WriteLine("in client");
        }
    }



   static void main()     
   {  
      DelegateTester tester = new DelegateTester();
      Client client = new Client();

      tester.PrintCallback += new DelegateTester.PrintDelegate(client.Print);
      tester.PrintCallback += new DelegateTester.PrintDelegate(client.Print);

      // copy the delegate
      DelegateTester.PrintDelegate copyOfDelegate = tester.PrintCallback;
      tester.PrintCallback -= new DelegateTester.PrintDelegate(client.Print);

      tester.PrintCallback();
      copyOfDelegate.Invoke();
    }

Ответы [ 2 ]

5 голосов
/ 14 июня 2011

Делегаты являются неизменными, как строки. Вот статья ..

3 голосов
/ 14 июня 2011

Я полагаю, что делегаты являются неизменяемыми, поэтому, где вы установили:

copyOfDelegate = tester.PrintCallback;

И затем:

PrintCallback -= new DelegateTester.PrintDelegate(client.Print);

Вы фактически присвоили исходный экземпляр делегата copyOfDelegate,и затем создается новый делегат при назначении на Printcallback из-за неизменности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...