Почему компилятор VB.NET считает, что интерфейс не реализован? - PullRequest
5 голосов
/ 09 апреля 2010

Обновление

Не думаю, что я был достаточно ясен, когда впервые разместил этот вопрос.

Посмотрите на эти скриншоты.

alt text ( Ссылка на увеличенный скриншот здесь )

Обратите внимание на части, которые я поместил в красный. Класс, показанный здесь , реализует INotifyPropertyChanged, но компилятор VB, похоже, считает, что объявленное событие PropertyChanged не соответствует сигнатуре INotifyPropertyChanged.PropertyChanged.

alt text ( Ссылка на увеличенный скриншот здесь )

Здесь я выбрал неправильную строку кода. Между этим и следующим снимком экрана я буквально просто вырезал и вставлял точно такую ​​же строку обратно в файл (то есть я нажимал Ctrl + X , а затем Ctrl + V ).

alt text ( Ссылка на увеличенный скриншот здесь )

Теперь вот! После обрезки и вставки строки ошибка исчезнет.

Что здесь происходит?


Оригинальный вопрос

У меня иногда такое случается, особенно с интерфейсом INotifyPropertyChanged в моем опыте, но я понятия не имею, ограничена ли проблема этим единственным интерфейсом (который может показаться странным) или нет.

Допустим, у меня есть некоторый код, подобный этому. Там есть интерфейс с одним событием. Класс реализует этот интерфейс. Включает в себя событие.

Public Interface INotifyPropertyChanged
    Event PropertyChanged As PropertyChangedEventHandler
End Interface

Public Class Person
    Implements INotifyPropertyChanged

    Public Event PropertyChanged _
    (ByVal sender As Object, ByVal e As PropertyChangedEventArgs) _
        Implements INotifyPropertyChanged.PropertyChanged

    ' more code below '
End Class

Время от времени, когда я собираю свой проект, компилятор неожиданно начинает действовать так, будто вышеприведенный код не работает. Он сообщит, что класс Person не реализует INotifyPropertyChanged, поскольку у него нет события PropertyChanged; или будет сказано, что событие PropertyChanged не может реализовать INotifyPropertyChanged.PropertyChanged, поскольку их подписи не совпадают.

Это довольно странно, но это самая странная часть: если я просто обрежу строку, начинающуюся с Event PropertyChanged, а затем вставлю ее обратно, ошибка исчезнет. Проект компилируется .

Кто-нибудь знает, что здесь происходит?

Ответы [ 2 ]

2 голосов
/ 09 апреля 2010

Код работает нормально для меня (Visual Studio 2008), вы должны столкнуться с некоторой ошибкой.

Во всяком случае, вы также можете реализовать это следующим образом:

Public Class Person
    Implements INotifyPropertyChanged

    Public Event PropertyChanged As PropertyChangedEventHandler _
        Implements INotifyPropertyChanged.PropertyChanged

End Class
1 голос
/ 09 апреля 2010

Вам необходимо отметить событие Public

...