ric*_*ard 8 .net c# cls-compliant
看起来奇怪的是,.NET的旗舰语言将包括不符合CLS的编程结构.这是为什么?
示例(从此处):仅使用大小写差异定义的两个或多个公共/受保护/受保护的内部成员
public int intA = 0;
public int INTA = 2;
Run Code Online (Sandbox Code Playgroud)
要么
public int x = 0;
public void X()
{
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*ell 16
即使是无符号整数也不符合(至少在公共API上),但它们对于进行位移的人来说非常重要,特别是在右移(有符号和无符号具有不同的右移行为)时.
它们最终会让您在适当的时候自由使用它们.区分大小的我可以减少宗教信仰 - 尽管有一个场地和财产的便利只有个案不同,我想我可以幸福地生活在被迫使用不同的名字!特别是现在我们自动实现了属性......
这类似于它允许你使用的方式unsafe- 这里的区别在于一些无符号整数不会破坏整个运行时的稳定性,所以它们不需要那么强大的傻瓜防护.
你可以加:
[assembly: CLSCompliant(true)]
Run Code Online (Sandbox Code Playgroud)
如果你愿意,编译器会在你弄错的时候告诉你.
最后:大多数代码(按卷)不作为组件使用.它是为了完成一项工作而编写的,并且可能由内部的其他代码使用.主要是图书馆编写者/供应商需要担心CLS合规性等问题.这是(按数字)少数.
Han*_*ant 14
这不是CLS合规性的工作方式.这是你的负担.C#并没有限制自己严格的合规性,这会使它成为一种表达能力差的语言.将所有.NET语言拖动到最低公分母将会迅速杀死该平台作为可行的编程环境.
您可以确保程序集中公开可见的类型符合CLS合规性.确保班级成员不会因案例而异,这很简单.让编译器帮你出使用[大会:CLSCompliant(真)]属性,编译器会警告你,当你滑倒.
请参阅http://msdn.microsoft.com/en-us/library/bhc3fa7f.aspx。
CLS 是一种可以选择加入的规范。引用自上:
当您设计自己的符合 CLS 的组件时,使用符合 CLS 的工具会很有帮助。在没有这种支持的情况下编写符合 CLS 的组件会更加困难,因为否则您可能无法访问要使用的所有 CLS 功能。
某些符合 CLS 的语言编译器(例如 C# 或 Visual Basic 编译器)使您能够指定您希望代码符合 CLS。这些编译器可以检查 CLS 合规性,并在您的代码使用 CLS 不支持的功能时通知您。C# 和 Visual Basic 编译器允许您将程序元素标记为符合 CLS,如果代码不符合 CLS,这将导致编译器生成编译时错误。例如,以下代码生成编译器警告。
来自上面链接的示例代码:
using System;
// Assembly marked as compliant.
[assembly: CLSCompliant(true)]
// Class marked as compliant.
[CLSCompliant(true)]
public class MyCompliantClass {
// ChangeValue exposes UInt32, which is not in CLS.
// A compile-time warning results.
public void ChangeValue(UInt32 value){ }
public static void Main( ) {
int i = 2;
Console.WriteLine(i);
}
}
Run Code Online (Sandbox Code Playgroud)
此代码生成以下 C# 警告:
复制警告 CS3001:参数类型“uint”不符合 CLS
| 归档时间: |
|
| 查看次数: |
1485 次 |
| 最近记录: |