【问题标题】:Why would the VB.NET compiler think an interface isn't implemented when it is?为什么 VB.NET 编译器会认为接口没有实现?
【发布时间】:2011-02-06 05:23:54
【问题描述】:

更新

我认为我最初发布此问题时还不够清楚。

看看这些截图。

(Link to bigger screenshot here)

注意我用红色框起来的部分。此处显示的类确实实现了INotifyPropertyChanged,但VB 编译器似乎认为声明的PropertyChanged 事件与INotifyPropertyChanged.PropertyChanged 的签名不匹配。

(Link to bigger screenshot here)

在这里,我选择了有问题的代码行。在这个和下一个屏幕截图之间,我实际上只是剪切并粘贴 完全相同的行回到文件中(即,我点击 Ctrl + X 后跟 Ctrl + V)。

(Link to bigger screenshot here)

现在看!将行剪切并重新粘贴后,错误消失了。

这是怎么回事?


原问题

我有时会发生这种情况,尤其是在我的经验中使用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 开头的行,然后将其粘贴回去,错误就会消失。 项目构建。

有人知道这里会发生什么吗?

【问题讨论】:

  • 只是想更新。我经常遇到这个错误。很多时候,当我使用剪切和粘贴移动类时,界面的事件“中断”:我同时得到一个“x 必须实现”和“y 不能实现...”。我再次剪切并粘贴,一切顺利。有时,当我使用 devXpress 的 CodeRush 工具的“将类型移动到文件”功能时,我会遇到同样的错误。有时我会遇到其他相关现象,例如一旦再次构建项目就会消失的幻像类。虫子,我告诉你 :-)

标签: vb.net compiler-construction interface compiler-errors inotifypropertychanged


【解决方案1】:

代码对我来说很好(Visual Studio 2008),你一定遇到了一些错误。

不管怎样,你也可以这样实现:

Public Class Person
    Implements INotifyPropertyChanged

    Public Event PropertyChanged As PropertyChangedEventHandler _
        Implements INotifyPropertyChanged.PropertyChanged

End Class

【讨论】:

  • 我认为你是对的;这是一个错误。我想我会向 MS 的 VB.NET 人员报告。
  • 这是在 Microsoft Connect 上报告的吗?如果是这样,链接是什么?我想投赞成票,因为这一直发生在我们身上。
【解决方案2】:

您需要标记事件Public

【讨论】:

  • 对不起,我没有复制和粘贴样板代码是我的错。班级中的事件是Public。就像我说的那样,将行剪切并粘贴回去会使错误消失(并且项目会构建)。
猜你喜欢
  • 2015-04-08
  • 1970-01-01
  • 1970-01-01
  • 2017-05-14
  • 1970-01-01
  • 1970-01-01
  • 2021-01-14
  • 2017-08-07
  • 2023-03-16
相关资源
最近更新 更多