Запуск события из реализации метода интерфейса по умолчанию, вызывающий ошибку времени компиляции.C#

Место общения программистов C#
Ответить
Anonymous
 Запуск события из реализации метода интерфейса по умолчанию, вызывающий ошибку времени компиляции.

Сообщение Anonymous »

Я пытаюсь использовать методы интерфейса по умолчанию в .NET 9, C# 13.
Рассмотрим следующий интерфейс:

Код: Выделить всё

public interface ICustomNotifyPropertyChanged:
INotifyPropertyChanged
{
public void OnPropertyChanged (string propertyName);

// Compiler Error: [CS0079].
//public void OnPropertyChanged (string propertyName)
//  => this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));

protected bool SetField (ref T field, T value, [CallerMemberName] string propertyName = "")
{
if (EqualityComparer.Default.Equals(field, value)) { return (false); }

field = value;
this.OnPropertyChanged(propertyName);

return (true);
}
}
Обратите внимание, что попытка реализации OnPropertyChanged по умолчанию вызывает следующую ошибку:

Код: Выделить всё

CS0079: The event 'ICustomNotifyPropertyChanged.PropertyChanged' can only appear on the left hand side of += or -=.
Этот вопрос не о том, подходит ли контекст использования, а о том, почему запуск события не разрешен. Я понимаю, что реализации по умолчанию были разработаны для обеспечения совместимости, хотя часто используются для удобства. Однако, помимо всего, что разрешено реализациям по умолчанию, почему бы не вызвать событие? Существуют ли нежелательные ситуации, которые могли бы возникнуть, если бы это было разрешено? Я не уверен, правильно ли я сформулировал заголовок вопроса.

Подробнее здесь: https://stackoverflow.com/questions/791 ... -causing-a
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»