VB.NETでは、数値の範囲を実装するクラスがあります。それはNumericRange(Of T)
となります。内部的にはNumericRange
はのようにT
をNullableとして格納します。私はこのクラスをNumericRange(Of UInt16)
としてラップする別のクラスを持っています。このクラスをMyNumRange
(私はここでは単純化しています)と呼んでください。 Nullable数値型をコンストラクタで正しく使用するにはどうすればよいですか?
MyNumRange
で、私はいくつかのコンストラクタが定義されている:
MyNumRange
の外にいくつかのコードで
Public Sub New(ByVal num1 As UInt16?, ByVal num2 As UInt16?)
' Code
End Sub
Public Sub New(ByVal num As UInt16, ByVal flag As Boolean)
' Code
End Sub
Public Sub New(ByVal num As UInt16)
' Code
End Sub
が、私はオープンエンドの範囲をインスタンス化してみてください。つまり、オペランドの1つがシナリオより大きいか等しいことを表すために欠けている範囲の値です。すなわち、New MyNumRange(32000, Nothing)
を呼び出すと、は(末尾のスペースに注意してください、と~
が区切り文字であると仮定)32000 ~
に(ToString
メソッドをオーバーライドしMyNumRange
年代を呼び出した後)と同一視すべきです。
ただし、を呼び出す以外は、New(UInt16?, UInt16?)
という署名を持つコンストラクタにはジャンプせず、代わりにNew(UInt16?, Boolean)
になります。これにより、NumericRange
は、番号32000
を単一の特定の値として処理します。オープンエンドの範囲ではありません。
私の質問があれば、私は彼らが私がNew(UInt16?, UInt16?)
コンストラクタの第2引数にNothing
値を渡すことができるような方法で、上記で定義したように、私はコンストラクタを使用することができ、それはNothing
、およびnum2.HasValue
に翻訳されますか、ありますコンストラクタ内から呼び出されると、False
が報告されますか?
コンストラクタを設定する方法を再考する必要がありますか?
これは動作します。直感的ではありませんが、機能します。オブジェクト/クラスを初期化できる方法の数を適切に表現するために、コンストラクタを書き出してオーバーロードする別の方法を見つけることができません。しかし、そのため私は 'FromString'関数も持っています。 – Kumba