Скажите, у меня есть следующий код C #:
Action a = TestMethod;
Action b = TestMethod;
Action c = b;
b += a;
Тесты показывают, что b
- это не тот же экземпляр, что и c
, поэтому очевидно, что оператор +
создает новый экземпляр делегата. Это правильное предположение? Использует ли он внутренний экземпляр b
или просто копирует информацию о методе / цели в новый экземпляр?
Кажется, я не могу найти реализацию оператора +
для делегатов, класс Delegate, кажется, не содержит его.
Может кто-нибудь пролить свет на эту проблему?
Причина, по которой я спрашиваю, состоит в том, что я создаю некоторые классы, которые будут накладываться друг на друга как лук, а самый внешний слой вызовет внутренний слой, получит несколько делегатов и затем присоединит к ним больше методов Я просто обеспокоен тем, что это каким-то образом изменит делегатов, которые я получаю из внутреннего слоя, и в этом случае мне нужно будет возвращать копии / клоны, а не только внутренние ссылки.
Обратите внимание, что это полностью внутренний код для моей библиотеки, поэтому, хотя я знаю, что раздача таких внутренних структур данных, как правило, является плохой идеей, если я смогу сделать это безопасно с этими классами, я сделаю это. *