c# - 为什么 C# 包含不符合 CLS 的编程结构?

标签 c# .net cls-compliant

.NET 的旗舰语言包含不符合 CLS 的编程结构,这似乎很奇怪。这是为什么?

示例(来自 here):两个或多个公共(public)/ protected / protected 内部成员定义为仅区分大小写

public int intA = 0;
public int INTA = 2; 

public int x = 0;

public void X()
{
} 

最佳答案

即使是无符号整数也不合规(至少在公共(public) API 上如此),但它们对于进行位移位的人来说非常重要,尤其是在右移时(有符号和无符号具有不同的右移行为) .

它们的最终目的是让您可以在适当的时候自由地使用它们。区分大小写的问题我可以不那么虔诚了——尽管拥有一个字段和属性仅按大小写不同很方便,但我想我可以快乐地生活在被迫使用不同的名字的情况下!特别是现在我们已经自动实现了属性...

这类似于它允许您使用 unsafe 的方式 - 这里的区别在于一些无符号整数不会破坏整个运行时的稳定性,因此它们不需要那么强大的 molly -守卫。

您可以添加:

[assembly: CLSCompliant(true)]

如果你喜欢,编译器会在你出错时告诉你。

最后:大多数代码(按体积)不作为组件使用。它是为完成一项工作而编写的,可能会被内部的其他代码使用。主要是图书馆作者/供应商需要担心 CLS 合规性等问题。那是(从数字上看)少数。

关于c# - 为什么 C# 包含不符合 CLS 的编程结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5022303/

相关文章:

c# - NUnit TestCase - 作为属性参数的数组不符合 CLS

c# - 为什么我的标识符被标记为不符合 CLS?

c# - 只允许是或否作为答案

c# - 使用 System.ComponentModel

.net - TargetFramework属性定义

.net - 何时抛出异常以及何时记录异常?

c# - 如何在 linq 类(表)中添加另一个带参数的构造函数

c# - 本地打印机的 SNMP?

c# - 编写一个等待 bool 值的异步方法

c# - 什么 C# 命名方案可用于符合 CLS 的属性和成员?