2

在 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返回 anI而不是 an Xor a Y,但是调用者必须强制转换它。我想将接口定义为

public interface I(of ii as I)

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

4

2 回答 2

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

这些选项都不会强制派生类返回它们自己类型的实例,但它们允许您以这种方式实现它。

于 2012-12-06T17:33:03.980 回答
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

于 2012-12-09T01:31:37.463 回答