バックグラウンド
私はマネージ x64 アセンブラ (ライブラリでもあります) を作成しているため、アドレスおよびオフセットとして使用する符号なし 64 ビット整数プロパティを定義する複数のクラスがあります。いくつかはファイル オフセットで、他は絶対アドレス (メイン メモリに相対的) で、その他は相対仮想アドレスです。
問題
ulong
上記のシナリオでは、プロパティにデータ型を使用していますが、これは正常に機能します。ただし、そのようなプロパティは CLS に準拠していません。それらを としてマークすることはでき[ClsCompliant(false)]
ますが、ライブラリのユーザーに CLS 準拠の代替手段を提供する必要があります。
オプションと質問
より大きなデータ型の代替プロパティを提供することを提案する人もいますが、 から0
までのすべての値を保持できるより大きな符号付き整数プリミティブがないため、これはオプションではありませんUInt64.MaxValue
。
ほとんどの使用シナリオでは、すべての可能な値が使用されるわけではないため、アセンブリ全体を非 CLS 準拠としてマークしたくありませんUInt64.MaxValue
。したがって、たとえば、正の値のみを受け入れるAddress
代替long
プロパティを提供できます。ただし、何らかの理由で を超える値が含まれているAddressAlternative
場合はどうなるでしょうか。いくつかの例外をスローする必要がありますか?Address
Int64.MaxValue
AddressAlternative
そして、にふさわしい名前は何でしょうAddressAlternative
?
を使用するたびに代替手段を提供するulong
と、多くの「二重」プロパティが発生します。これを行うより良い方法はありますか?ulong
プロパティのすべての使用法が同じセマンティクスを持つわけではないことに注意してくださいstruct
。
そして最後に、コンストラクターのパラメーターに同じ CLS 準拠の問題があります。long
では、そのようなパラメーターを受け入れる代替のオーバーロードを提供する必要がありますか?
ほとんどのシナリオで使用できる限り、CLS のみのコンテキストからライブラリを使用する場合、ライブラリの (一部の機能) の使用を制限してもかまいません。