我正在编写一个框架,我们希望它可以从C#,C ++,VB获得。我们现在不会对任何其他语言严格限制。但是我们在使用CLS时遇到了一些问题(我们必须使用unsign等)。如果我们不在这里使用CLS,你能否提出一些真正的问题?
答案 0 :(得分:2)
嗯,有很多关于CLS Compliance的规则,而不仅仅是有关签名/无符号类型的规则。您必须遵循的一个简单的问题是:
对于两个被视为不同的标识符,它们的区别必须不仅仅是它们的情况。
对于C#或C ++,您不需要它,但Visual Basic要求这样做。您还使用了“现在任何其他语言”。如果列表将来有可能扩展,那么如果你现在强迫自己走下CLS合规之路,你将为自己省去很多问题。
答案 1 :(得分:1)
通常认为将程序集标记为CLSCompliant
,然后对不符合CLS的类型和成员使用CLSCompliant(false)
属性,这是一种很好的做法。
当然,如果程序集中的大多数类型都不符合CLS,那么将程序集标记为不合规可能更有意义。
最小化其他语言问题的一种方法是仅标记具有CLSCompliant(false)
的个别成员,并为每个此类成员提供符合CLS的替代方案。
答案 2 :(得分:0)
CLS定义了可用于任何符合CLS的语言的功能子集。一些奇特的特征,如无符号的原始类型,被排除在外,使语言更容易满足CLS。
只要您要使用的语言支持您要使用的数据类型,代码就不一定需要符合CLS。如果您希望能够将代码标记为符合CLS,则您根本无法使用不受支持的类型。
在某些情况下,您可以使用更大的数据类型来处理无符号值,例如使用Int64
来保存UInt32
可能包含的任何值。