0

このクラスとまったく同じクラスはありますか?

Class X(Of T)
    Public value As T
End Class

どちらもメンバー値を設定できないため、このクラスと同じではないことに注意してNullable(Of T)くださいTuple(Of T)。クラスには次のプロパティが必要です。

  1. パラメーターとして渡された場合、呼び出されたメソッドによって行われた変更は、送信されたオブジェクトに影響を与える必要があります。つまり、組み込み型の場合のようにオブジェクトのコピーを作成してはなりません。
  2. x が X のオブジェクトであるvalue構文を使用して、メンバーに値を設定できるようにする必要があります。x.value = <some value>
4

2 に答える 2

1

決定的な答えではありませんが、やってみます。

私は個人的に、このタイプのクラスを以前に見たことがありません。ジェネリックに関するドキュメントでさえ、作成され、例で使用されているのと同様のクラスの例を示しています。

.net フレームワークの msdn ジェネリック。

次に例を示します。

Public Class Generic(Of T)
    Public Field As T

End Class

....

Public Shared Sub Main()
    Dim g As New Generic(Of String)
    g.Field = "A string" 
    '...
    Console.WriteLine("Generic.Field           = ""{0}""", g.Field)
    Console.WriteLine("Generic.Field.GetType() = {0}", g.Field.GetType().FullName)
End Sub
于 2013-02-25T10:37:17.933 に答える
1

Holder<T>クラスとフィールドを呼び出しましたが、私は時々そのようなクラスを作成しましたValue。このようなクラスには、次の 2 つの適切な使用例があります。

  • のコレクションを指定すると、コレクションHolder<someValueType>のコンテンツの便利なインプレース変更を実行できます。たとえば、 が与えられた場合、List<Holder<Point>>と言うことができますMyList[3].Value.X += 5;

  • がアトミック操作を許可するタイプの場合、コレクションがスレッドセーフでなくてもT、コレクションの内容に対してスレッドセーフなアトミック操作を実行Holder<T>できます。たとえば、辞書に必要なすべてのキーを事前に知っていたあるシナリオでは、 を作成し、Dictionary<String, Holder<Integer>>複数のスレッドを使用Interlocked.Incrementして、それらの文字列がそれぞれ何回出現したかを数えることができました。スレッドセーフではありませんでしたが、ディクショナリに格納された項目Dictionaryのセットを変更する必要がなかったため、プログラムはロックなしでスレッドセーフでした。Holder<Integer>

組み込み型を使用する場合はT[]、サイズが 1 の a が機能します。その型の主な欠点は、要素 0 が実際に存在する (つまり、空の配列にならない) ことを保証する型固有のものがないことです。

于 2013-02-25T17:44:17.837 に答える