Ответ 1
Нет разницы между 1 и 2, потому что 2 является синтаксическим сахаром для 1. Только если 2, упомянутый в поле экземпляра делегата класса класса, а не в имени фактического метода, будет разница в скомпилированном IL.
С точки зрения того, что происходит во время выполнения, метод event Remove
, похоже, не заботится о том, передан ли ему экземпляр делегата, тот же, что и тот, который передан методу Add
. Я не могу вспомнить, почему это так, но я бы предположил, что экземпляры делегатов всегда интернированы.
EDIT: Джон Скит говорит, что метод Remove
использует значение равенства (Delegate.Equals
), чтобы определить, какой делегат удалить из списка, а не интернировать + ссылочное равенство. Тот же конечный результат, другой метод.: -)