我很难找出方法的正确接口或实际实现签名/语法。该方法本身可以按预期工作,编译器至少不会抱怨该接口的语法,但是当实际上向该方法添加必要的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”。
那么这种方法签名的正确语法是什么?
答案 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)的自动补全产生了不同的结果。