私はgenericsを処理するためのベースクラスを設計するいくつかの問題があります。注意しなければならないのは、Int16、Int32、またはInt64(ShortまたはLong)のような数値型の型を制限する必要があるということです。VB.Net一般的な制限
私はあなたがOf T as {Structure}
を行うことができると知っていますが、タイプとして非整数を許可したくありません。
何か提案がありますか?
私はgenericsを処理するためのベースクラスを設計するいくつかの問題があります。注意しなければならないのは、Int16、Int32、またはInt64(ShortまたはLong)のような数値型の型を制限する必要があるということです。VB.Net一般的な制限
私はあなたがOf T as {Structure}
を行うことができると知っていますが、タイプとして非整数を許可したくありません。
何か提案がありますか?
私が考えているのは、Friend
ジェネリッククラスを作成し、そこから継承する6つのクラスを構築することです。 Friend
は、そのプロジェクトを含むプロジェクトを除いて、メンバーを非公開にします。これにより、プロジェクトの外部にあるものが例えばIntXClass(Of Double)
としてインスタンス化されなくなります。
Friend Class IntXClass(Of T As Structure)
' TODO: Define all IntXClass members.
End Class
Public Class Int16Class
Inherits IntXClass(Of Int16)
End Class
Public Class Int32Class
Inherits IntXClass(Of Int32)
End Class
Public Class Int64Class
Inherits IntXClass(Of Int64)
End Class
Public Class UInt16Class
Inherits IntXClass(Of UInt16)
End Class
Public Class UInt32Class
Inherits IntXClass(Of UInt32)
End Class
Public Class UInt64Class
Inherits IntXClass(Of UInt64)
End Class
.Netには、制約の有無にかかわらず、数値型よりも一般的に有用なサポートがありません。 This libraryは実装の面で役立つかもしれませんが、制約の定義という点ではまだ幸運です。
あなたが本当に窮屈な場合は、静的なコンストラクタの型パラメータをチェックして、それが許容できない場合はスローして、間違ってインスタンス化しようとしている人のためにTypeLoadException
になります。
どうすれば比較できますか? パラメータを 'Type'とし、' param is GetType(Int16) 'のようにするとどうなりますか? 私はparamを 'Object'として渡すかのように思えるので、' TypeOf(param)Is Int16'をしなければなりません。 オブジェクト/タイプとして値を渡すプロ/コンはどうなりますか? – GoldBishop
ええ、それについては考えましたが、配列にサイズを割り当てる正の数全体を取る1つの基本クラスを持つことを考えていました。私は、この基本クラスを継承するいくつかの事前設定された派生クラスを持っていますが、エンドユーザーのカスタマイズ可能な汎用クラスとしても使用できます。 SQLの数値(P、S)型に似ています。他のすべての数値型は、実際には数値型のバリエーションだけです。 – GoldBishop
私は少し混乱しています。これは、 "配列にサイズを割り当てる正の数全体を取る1つの基本クラス"を達成するのに失敗しますか?それはコンストラクタの一部にすぎませんか? –