Vb.net 签名为(T作为类的)的类方法的正确接口(实现)语法

Vb.net 签名为(T作为类的)的类方法的正确接口(实现)语法,vb.net,interface,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

我很难找到正确的接口或方法的实际实现签名/语法。方法本身按预期工作,编译器至少不会抱怨接口的语法,但当实际向方法添加必要的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”必须实现“函数GetIt(属于T As 类()作为接口“IMyInterface”的“T”

首先,使用“自动完成”进行此操作会导致以下不完整的行:

Public Function GetIt(Of T As Class)() As T Implements IMyInterface.GetIt(Of
VS显然抱怨a)

“预期类型”

及(二)

")"预期"

第二,在完成这一行之后

Public Function GetIt(Of T As Class)() As T Implements IMyInterface.GetIt(T As class) As T
VS静止报告

")"预期"

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

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

,因此您无法命名该类

您可以在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被放错的关键字弄糊涂了。我希望这有助于你解决问题

你们都是对的,解决办法是

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

我还想到让VS进行重构(编辑->重构->提取接口),上面就是VS这样做的。我仍然觉得奇怪的是VS(2017)的自动完成产生了一个不同的结果。

我的自动完成是这样做的:公共函数GetIt(作为类的T)作为T实现IMyInterface.GetItMy bad。我只是在这个示例代码中使用了“MyClass”,没有记住它是一个关键字。实际的类具有不同的名称。我已经更新了我的帖子以避免这种混乱。