背景
我正在编写一个托管的 x64 汇编器(它也是一个库),因此它有多个类,这些类定义了一个无符号 64 位整数属性,用作地址和偏移量。有些是文件偏移,有些是绝对地址(相对于主内存),还有一些是相对虚拟地址。
问题
我ulong
在提到的场景中使用属性的数据类型,这很好用。但是,此类属性不符合 CLS。我可以将它们标记为[ClsCompliant(false)]
,但是我需要为图书馆的用户提供符合 CLS 的替代方案。
选项和问题
有些人建议提供具有更大数据类型的替代属性,但这不是一个选项,因为没有更大的有符号整数原语可以保存从0
to 的所有值UInt64.MaxValue
。
我宁愿不将我的整个程序集标记为不符合 CLS,因为在大多数使用场景中,并非所有可能的值UInt64.MaxValue
都被使用。因此,例如,Address
我可以提供一个替代long
属性AddressAlternative
,它只接受正值。Address
但是,当以某种方式包含高于 的值时会发生什么Int64.MaxValue
。应该AddressAlternative
抛出一些异常吗?
什么是合适的名称AddressAlternative
?
为 的每种用法提供替代方案ulong
会导致许多“双重”属性。有一个更好的方法吗?请注意,并非所有ulong
属性的使用都具有相同的语义,因此单个struct
不会削减它。
最后,我在构造函数参数中遇到了同样的 CLS 合规性问题。那么我应该long
为这样的参数提供一个替代的重载接受吗?
我不介意在仅 CLS 的上下文中使用库时限制其(某些功能)的使用,只要它可以在大多数情况下使用即可。