如果我们不使用CLS会出现什么问题?

时间:2012-09-25 07:37:35

标签: .net cls-compliant

我正在编写一个框架,我们希望它可以从C#,C ++,VB获得。我们现在不会对任何其他语言严格限制。但是我们在使用CLS时遇到了一些问题(我们必须使用unsign等)。如果我们不在这里使用CLS,你能否提出一些真正的问题?

3 个答案:

答案 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可能包含的任何值。