如何在vb泛型接口中创建一个返回实现类实例的方法?

时间:2012-12-06 17:13:28

标签: vb.net generics interface

在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而不是XY,但是调用者必须投出它。我想把接口定义为

public interface I(of ii as I)

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

2 个答案:

答案 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

相关问题