在Visual Basic中,我想创建一个包含一个返回实现类对象的函数的接口。那是
public interface I
function maker as ???
end interface
public class X
implements I
function maker as X
return new X()
end function
end class
public class Y
implements I
function maker as Y
return new Y()
end function
end class
有没有办法说出来?我想我总是可以说maker
会返回I
而不是X
或Y
,但是调用者必须投出它。我想把接口定义为
public interface I(of ii as I)
但是这样做的重点是,我可以创建一个使用of I
的泛型类,如果我这样说,那么编译器会坚持无限回归of I(of I(of I...
答案 0 :(得分:2)
不完全是,但你可以这样做:
Public Interface I(Of T)
Function Maker() As T
End Interface
Public Class X
Implements I(Of X)
Public Function Maker() As X Implements I.Maker
Return New X()
End Function
End Class
或者,像这样:
Public Interface I
Function Maker() As I
End Interface
Public Class X
Implements I
Public Function Maker() As I
Return New X()
End Function
End Class
这些选项中没有强制派生类返回自己类型的实例,但是他们允许以这种方式实现它。
答案 1 :(得分:0)
这是您需要“奇怪的重复”类型声明的地方:
Public Interface I(Of T As I(Of T))
Function Maker() As T
End Interface
Public Class C
Implements I(Of C)
Function Maker() As C Implements I(Of C).Maker
Return New C
End Function
End Class
Sub Main
Dim First As I(Of C) = New C
Dim Second As C = First.Maker
End Sub
正如Steven所说,这仍然不会强制声明类型将自己用作T
,但至少现在T
肯定会实现I
。