具有签名的类方法的正确接口(实现)语法(Of As)()As T

时间:2019-06-25 15:25:00

标签: vb.net interface

我很难找出方法的正确接口或实际实现签名/语法。该方法本身可以按预期工作,编译器至少不会抱怨该接口的语法,但是当实际上向该方法添加必要的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   类)()作为接口'IMyInterface'的T'。

首先,通过使用自动补全操作以以下不完整的行结束:

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仍报告

  

')'预期

并指向参数定义“类别”中的“ A”。

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

2 个答案:

答案 0 :(得分:0)

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被放错位置的关键字所迷惑。希望这可以帮助您解决问题

答案 1 :(得分:0)

你们都是正确的,解决方案是

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

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