是C#4.0的新功能 - “可选参数”CLS兼容?
-
12-11-2019 - |
题
这个新功能非常方便。
最近我读取了“Microsoft All-In-One Codework”的文档,并提到了“可选参数”不是CLS兼容的。
所以我通过在公共API中使用“可选参数”来测试它,并打开FXCOP,然后我编译和FXCOP没有抱怨任何事情。在含义时,FXCOP确实在添加具有UINT作为返回类型的API时报告警告。 所以现在我很困惑,是“可选参数”CLS兼容或不呢?
以及找出新语言功能是否符合CLS兼容的最佳方法是什么?
解决方案
可选参数是“排序”CLS兼容。具有可选参数的方法是合法的,可以用CLSCompliant
属性成功编译,但这些方法的呼叫者不一定需要考虑默认参数值或可选属性。 (在这种情况下,这些方法将以与标准方法的方式与标准方法完全相同,要求所有参数在呼叫站点上明确说明。)
使用默认参数的方法 在通用语言下允许 规格(CLS);但是,CLS 允许编译器忽略这些值 已分配给这些参数。 为编译器编写的代码 忽略默认参数值 必须明确提供论据 每个默认参数。维护 你想要的行为 编程语言,方法 使用默认参数应该是 用方法替换为重载 提供默认参数。
其他提示
我解释你的问题是关于可选参数
如果是这样,我相信它们是符合CLS兼容的,您可以使用 clscompliant 属性:
using System;
[assembly: CLSCompliant(true)]
namespace ConsoleApplication1
{
public class Program
{
public static int Test(int val=42)
{
return val;
}
static void Main(string[] args)
{
System.Console.WriteLine(Test());
}
}
}
.
这个没有警告编译。
不隶属于 StackOverflow