0

私はこのトピックについて多くのおしゃべりを見てきました。例と望ましい結果は常に非常に具体的で専門的ですが. これに関する方向性は高く評価されます。

カスタム クラス:

Public Class customClass(Of T, S)
[include properties]
[include methods]
End Class

クラスの実装:

dim [string] as string = string.empty
dim [type] as type = [string].gettype 

dim instance as customClass(of [type], integer) 

また、vb.net ではコンストラクターにパラメーターを渡すことができないことを読みました。クラスに型を渡して、その引数の型に依存するオブジェクトを生成できないことを受け入れることを拒否します。これに対する唯一の答えは、目的の型にキャストされたオブジェクトのリストを返すクラスの関数ですか? お時間をいただきありがとうございます。

この質問は、学術研究によって動機付けられています。上記は「私がやろうとしていること」です。

4

2 に答える 2

2

あなたが何をしようとしているのかわかりにくいですが、私がこれを正しく読んでいれば、変数を取り、それを一般的な引数として使用しようとしています。これは .NET では不可能です。ジェネリック クラスの変数を宣言する場合、ジェネリック引数としてコンパイル時の型が必要になるため、Type 型の変数にすることはできません。

これは、いくつかの理由で重要です。その 1 つは、型の制約が確実に満たされるようにすることです。

そう:

Class Foo(Of T)
End Class

Dim x as Type = GetType(String)
Dim y as Foo(Of x)

動作しません - あなたがしなければなりません:

Dim y as Foo(Of String)

リフレクション ツリーとエクスプレッション ツリーは常に存在しますが、これは解決策というよりはハックです。

于 2012-10-27T04:38:20.793 に答える
0

動的型を使用してこの種の型付き宣言を呼び出すことはできませんが(Of t,s)、インターフェイスまたは継承を使用して複数の型を「グループ化」または区切ることができます。これも非常に便利です。

Class customClass(Of T As iMyInterface, s As iMyInterface)
End Class

Interface iMyInterface
End Interface

Class MyClass1
    Implements iMyInterface
End Class
Class MyClass2
    Implements iMyInterface
End Class

Dim y As New customClass(Of MyClass1, MyClass2)
于 2020-08-25T12:07:44.307 に答える