2012-12-06 22 views
2

在Visual Basic中,我想创建一个包含返回实现类对象的函数的接口。那是如何在返回实现类的实例的vb通用接口中创建方法?

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而不是一个XY,但然后调用者将不得不施放它。我想定义接口

public interface I(of ii as I) 

但在这样做,这是这样我就可以创建使用of I泛型类整点,如果我说是,那么编译器坚持的无限回归of I(of I(of I...

回答

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 

这两个选项都不是强制派生类返回自己的类型的一个实例,但他们允许你可以这样实现它。

+0

我还没有尝试过,但我会给你正确答案的投票,直到我尝试它并发现它不起作用为止! – Jay

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 

正如史蒂芬说,这仍然没有强制声明类型将自身用作T,但至少现在T绝对器具I

+0

也许我错过了一些东西。我试图做到这一点,当我试图创建一个接口的实例时,VS不会让我,因为我陷入了一个无限循环的“s”。 – Jay

+0

我已经更新为一个完整的可编译示例(除了'Module'外)。 –

相关问题