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

そう言う方法はありますか?は常にorではなく anをmaker返すと言うことができると思いますが、呼び出し元はそれをキャストする必要があります。インターフェイスを次のように定義することを考えましたIXY

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

スティーブンが言うように、これはまだ宣言型がそれ自体を as として使用することを強制するものではありませんTが、少なくとも今ではT間違いなく を実装してIいます。

于 2012-12-09T01:31:37.463 に答える