1

私はここで言語変換を厳密に探しています:

List<?>

私はすでに回避策を持っていますが、ワイルドカードを使用する「生の」ジェネリックリストの可変型に相当するvb.netが見つからないことに驚いています。ここでのJavaのメカニズムにより、Tが何であるかに関係なくリストを参照できます。Javaを使用すると、さらに進んで次のようなことを行うこともできます。

List<? extends Number>
List<? super Double>

私は試した:

List(Of )

そしてそれはうまくいきませんでした。これは、GetType関数内でのみ機能するようです。

4

4 に答える 4

4

これらはC#ジェネリック宣言ではなく、Java宣言であるため、VB.NETには同等のものはありません。

Konradが上記のコメントで述べているように、JavaとC#の一般的な実装はまったく異なります。C#は拡張で動作し、Javaは消去で動作します。したがって、C#では「生の」ジェネリック型は利用できません。

于 2012-05-17T15:15:07.740 に答える
3

について話してるの

List(of T)
List(of String)

于 2012-05-17T15:14:50.650 に答える
1

MSDNのVisualBasic (Visual Basic)のジェネリック型を参照してください。あなたが探しているものはタイプ制約と呼ばれます。これを、必要な制限を実行するメソッドまたはクラスの宣言と組み合わせる必要があります。

すべてのタイプを受け入れるには、次のようにします。

Public Sub testSub(Of t)(arg As List(Of t))
    'Do something.
End Sub

または、たとえば値型に制限するには、次のようにします。

Public Sub testSub(Of t As Structure)(arg As List(Of t))
    'Do something.
End Sub

探しているのは、.NetFrameworkでは許可されていない純粋に一般的なプロパティです。以下のコードはコンパイルされません。

Public Property testSub(Of t) As List(Of t)
    Get
    End Get
    Set
    End Set
End Property 

あなたが得ることができる最も近いものは:

Public Class testClass(Of T)
    Public Property testSub As List(Of t)
        Get
        End Get
        Set
        End Set
    End Property 
End Class
于 2012-05-17T15:17:22.930 に答える
0

私の目標は、MyBaseClassのコレクションを指すCollectionプロパティをMyBaseClassに設定できるようにすることでした。これは、タイプMyCollection(Of T)であり、TはMyBaseClassのタイプです。基本クラスは、何がそれをサブクラス化するかを知りません。したがって、MyCollectionの実装を割り当て、早期バインディングとインテリセンスを取得する必要がありました。

私はケーキを持ってそれも食べる必要がありました(初期バインディングと後期バインディング)。

MyBaseClass内で行ったことは次のとおりです。

  Public Event pCollectionChanged(Value As IList)
  Private _pCollection As IList
  <XmlIgnore()> _
  <System.ComponentModel.Browsable(False)> _
  Public Property pCollection As IList
    Get
      Return _pCollection
    End Get
    Set(Value As IList)
      If _pCollection Is Value Then Exit Property
      _pCollection = Value
      RaiseEvent pCollectionChanged(Value)
    End Set
  End Property

  Public Function Collection(Of t As MyBaseClass)() As MyCollection(Of t)
    Return pCollection
  End Function 

これで、MyCollection(Of any)をpCollectionに割り当てることができ、コードを呼び出すことでこれを行うことができます。

Dim MyObject As New MyBaseClassSubType    
MyObject.Collection(Of MyBaseClassSubType).MyNeatoCollectionMethod

一方、以前はCollection As IListを使用していましたが、MyNeatoCollectionMethodにアクセスできませんでした。

多田!答えてくれたすべての人に感謝します。

于 2012-05-18T13:15:36.543 に答える