符合CLS标准的ulong属性替代方案
背景
我正在编写一个托管x64汇编程序(它也是一个库),因此它有多个类,它们定义了一个无符号的64位整数属性,用作地址和偏移量。一些是文件偏移,另一些是绝对地址(相对于主存储器),另一些是相对虚拟地址。
问题
我在上述场景中使用
ulong
数据类型作为属性,这很好用。但是,此类属性不符合CLS。我可以将它们标记为[ClsCompliant(false)]
,但是我需要为库的用户提供符合CLS的替代方案。
选项和问题
有人建议提供一个具有更大数据类型的替代属性,但这不是一个选项,因为没有更大的有符号整数原语可以保存从0
到UInt64.MaxValue
的所有值。
我宁愿不将我的整个程序集标记为非CLS兼容,因为在大多数使用场景中,并非所有可能的值都高达UInt64.MaxValue
。因此,对于例如Address
我可以提供另一种long
财产AddressAlternative
,它只接受正值。但是,当Address
以某种方式包含高于ѭ9的值时会发生什么。应该AddressAlternative
抛出一些例外吗?
什么是AddressAlternative
的合适名称?
为每次使用ulong
提供替代方案将导致许多“双重”属性。有一个更好的方法吗?请注意,并非所有ulong
属性的用法都具有相同的语义,因此单个struct
不会削减它。
最后,我在构造函数参数中遇到了相同的CLS合规性问题。那么我应该为这样的参数提供接受long
的替代过载吗?
我不介意在从仅CLS上下文中使用库时限制库的(某些功能)的使用,只要它可以在大多数情况下使用。
没有找到相关结果
已邀请:
2 个回复
外镶受继
碉罕城爸
。但是,当仅针对x86时,它将引发异常。
但是,如果事实证明你真的需要额外的一点。你可以提供两个库。一个是CLS兼容的,一个不是 - 用户的选择。这可以通过使用#if语句和使用条件编译符号来完成。这样,您可以定义相同的变量名称,但具有不同的定义。 http://msdn.microsoft.com/en-us/library/4y6tbswk.aspx