问题描述
我的目标框架是 .NET 5,应用程序类型是控制台。我使用 Visual Studio 2019 版本 16.10.1 作为 IDE。我想看看如果我在 C# 代码中使用 CLSCompliant 提示并故意违反 CLS 合规性,我是否确实收到警告。违反是通过引用类型为 UInt32 的变量来实现的,因为未在 CLS 中指定。但似乎我没有收到任何错误或警告。
代码如下:-
using System;
[assembly: CLSCompliant(true)]
namespace Demo
{
class Program
{
static void Main(string[] args)
{
UInt32 x = 12;
Console.WriteLine(Convert.ToString(x));
}
}
}
我是否必须为此更改一些 IDE 设置才能显示与 CLS 相关的警告?
解决方法
CLS-complience 是您图书馆的合同,这意味着它可以在任何语言中使用。例如,某些语言不支持无符号整数或不区分大小写
这意味着您可以按照自己喜欢的方式编写内部 API 或实现,但必须遵循公共 API 的规则
[CLSCompliant(true)]
public class MyClass
{
public void Yes(int value) {}
public void No(uint value) {} // warning: uint is not compliant
public void no(int value) {} // warning: No & no is same word
public void Yes2(int value)
{
Span<byte> bytes = stackalloc byte[10]; // we can do weird things inside,but as long public API is compliant,it won't cause warnings
Helper.ProcessBytes(bytes);
}
}
您可以在docs
中阅读更多内容