0

我正在编写一个框架,我们希望它可以从 C#、C++、VB 中获得。目前我们对任何其他语言都没有限制。但是我们在使用 CLS 时遇到了一些问题(我们必须使用 unsign 等)。如果我们在这里不使用 CLS,你能给出一些实际出现的问题吗?

4

3 回答 3

2

嗯,有很多关于CLS 合规性的规则,而不仅仅是关于有符号/无符号类型的规则。您必须遵循或已经遇到问题的一个简单方法是:

要使两个标识符被认为是不同的,它们的区别必须不仅仅在于它们的大小写。

对于 C# 或 C++,您不需要它,但 Visual Basic 要求它是这样的。您还使用了“目前任何其他语言”一词。如果将来该列表有可能扩大,那么如果您现在强迫自己走 CLS 合规之路,您将为自己节省很多问题。

于 2012-09-25T07:46:38.233 回答
1

通常认为将程序集标记为 的良好做法,然后在不符合 CLS 的类型和成员上CLSCompliant使用该属性。CLSCompliant(false)

当然,如果程序集中的大多数类型不符合 CLS,则将程序集标记为不符合可能更有意义。

将其他语言问题最小化的一种方法是仅用 标记单个成员CLSCompliant(false),并为每个此类成员提供符合 CLS 的替代方案。

于 2012-09-25T08:01:10.257 回答
0

CLS 定义了在任何符合 CLS 的语言中可用的功能子集。一些奇异的特性,如无符号原始类型,被排除在外,以使语言更容易满足 CLS。

只要您要使用的语言支持您要使用的数据类型,代码就不需要真正符合 CLS。如果您希望能够将代码标记为符合 CLS,则根本不能使用不受支持的类型。

在某些情况下,您可以使用更大的数据类型来处理无符号值,例如使用 anInt64来保存 anUInt32可以保存的任何值。

于 2012-09-25T07:55:27.820 回答