这个新功能非常方便。

最近我读取了“Microsoft All-In-One Codework”的文档,并提到了“可选参数”不是CLS兼容的。

所以我通过在公共API中使用“可选参数”来测试它,并打开FXCOP,然后我编译和FXCOP没有抱怨任何事情。在含义时,FXCOP确实在添加具有UINT作为返回类型的API时报告警告。 所以现在我很困惑,是“可选参数”CLS兼容或不呢?

以及找出新语言功能是否符合CLS兼容的最佳方法是什么?

有帮助吗?

解决方案

可选参数是“排序”CLS兼容。具有可选参数的方法是合法的,可以用CLSCompliant属性成功编译,这些方法的呼叫者不一定需要考虑默认参数值或可选属性。 (在这种情况下,这些方法将以与标准方法的方式与标准方法完全相同,要求所有参数在呼叫站点上明确说明。)

使用默认参数的方法 在通用语言下允许 规格(CLS);但是,CLS 允许编译器忽略这些值 已分配给这些参数。 为编译器编写的代码 忽略默认参数值 必须明确提供论据 每个默认参数。维护 你想要的行为 编程语言,方法 使用默认参数应该是 用方法替换为重载 提供默认参数。

(取自“ca1026:不应使用”。 )

其他提示

我解释你的问题是关于可选参数

如果是这样,我相信它们是符合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());
        }
    }
}
.

这个没有警告编译。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top