【问题标题】:Proper Interface (Implements) syntax for class method with signature (Of T As Class)() As T带有签名的类方法的正确接口(实现)语法 (Of T As Class)() As T
【发布时间】:2019-11-07 11:46:49
【问题描述】:

我很难找出正确的接口或方法的实际实现签名/语法。方法本身按预期工作,编译器至少不会抱怨接口的语法,但是当实际向方法添加必要的 Implements 语句时,它会失败。

这是我所拥有的:

Public Interface IMyInterface
   Function GetIt(Of T As Class)() As T
End Interface

Public Class Foo
   Implements IMyInterFace

   Public Function GetIt(Of T As Class)() As T
End Class

如果我现在尝试添加必要的 Implements 语句,即使使用 IntelliSense 弹出窗口中的自动完成功能,VS 也会抱怨语法。如果没有 Implements 语句,VS 会抱怨:

BC30149 类 'Foo' 必须实现 'Function GetIt(Of T As Class)() As T' 用于接口“IMyInterface”。

首先,使用自动补全功能会得到以下不完整的行:

Public Function GetIt(Of T As Class)() As T Implements IMyInterface.GetIt(Of

VS 显然抱怨 a)

'预期类型'

和 b)

')' 预期

其次,在完成该行时

Public Function GetIt(Of T As Class)() As T Implements IMyInterface.GetIt(T As class) As T

VS 仍然报告

')' 预期

并指向参数定义“As Class”中的“A”。

那么这种方法签名的正确语法是什么?

【问题讨论】:

  • 我的自动完成功能是这样的:Public Function GetIt(Of T As Class)() As T Implements IMyInterface.GetIt

标签: vb.net interface


【解决方案1】:

你说的都对,解决办法是

Public Function GetIt(Of T As Class)() As T Implements IMyInterface.GetIt

我也有让 VS 进行重构的想法(编辑 -> 重构 -> 提取接口),以上就是 VS 的做法。我仍然觉得奇怪的是 VS (2017) 的自动补全会产生不同的结果。

【讨论】:

    【解决方案2】:

    MyClass is a keyword,所以你不能命名这个类。

    您可以在 VB.NET 中关闭方括号中的关键字来避免这种情况。

    Public Interface IMyInterface
        Function GetIt(Of T As Class)() As T
    End Interface
    
    Public Class [MyClass]
        Implements IMyInterface
    
        Public Function GetIt(Of T As Class)() As T Implements IMyInterface.GetIt
            Throw New NotImplementedException()
        End Function
    End Class
    

    但由于这只是概念验证,您的实际实现可能不会遇到此问题。

    顺便说一句,我投票结束你的问题,因为它更多的是关于使用MyClass 作为类名的问题。如果您没有这样做,您的自动完成肯定会生成正确的方法签名。相反,您的 IDE 被错误放置的关键字弄糊涂了。我希望这可以帮助您解决问题

    【讨论】:

    • 我的错。我只是在这个示例代码中使用了“MyClass”,没有记住它是一个关键字。实际的类有不同的名称。我已经更新了我的帖子以避免这种混淆。
    猜你喜欢
    • 2019-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-09
    • 1970-01-01
    • 1970-01-01
    • 2015-01-30
    • 2015-01-01
    相关资源
    最近更新 更多