Ответ 1
Я никогда раньше этого не видел, и поиск действительно не вызывает каких-либо реальных применений, но может найти его в компиляторе Roslyn testsuite:
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
public class C
{
[method: DllImport("c")]
public extern static event System.Action G;
}
Тест проверяет, что он импортирует функции add_G
и remove_G
из DLL c
. Поскольку импортируются только методы доступа, нет возможности для c
или любого из его пользователей поднять это событие, которое может быть выполнено только внешней DLL.
Я подозреваю, что это просто для полноты. Ключевое слово extern
было уже там, и вполне возможно было бы больше работать, чтобы отклонить его в сочетании с событиями, чем заставить его работать.
Что касается вашего редактирования, свойства, индексы, конструкторы, статические конструкторы, финализаторы, операторы имеют одну общую черту: они - методы. Причудливые методы, но методы тем не менее. То же самое для аксессуаров событий. И поскольку методы могут быть extern
, это относится ко всем методам, если только правила не имеют особых исключений. Конкретные исключения требуют работы, и преимущества этой работы должны перевесить затраты. В этом случае в таких случаях практически нет преимуществ для отклонения extern
.