C#4.0的新功能 - "可选参数"是否符合CLS?

Cui*_*崔鹏飞 30 .net c# optional-parameters cls-compliant c#-4.0

这个新功能非常方便.

最近我阅读了"Microsoft All-In-One Code Framework"的文档,并提到"Optional Parameters"不符合CLS.

所以我在公共API中使用"Optional Parameters"测试它,然后打开FxCop,然后我编译了,FxCop没有抱怨任何事情.平均而言,当我添加一个具有uint作为返回类型的API时,FxCop确实报告了一个警告.

所以现在我很困惑,"可选参数"是否符合CLS标准?

什么是找出新语言功能是否符合CLS标准的最佳方法?

Luk*_*keH 25

可选参数是符合CLS标准的"排序".带有可选参数的方法是合法的,可以使用该CLSCompliant属性成功编译,这些方法的调用者不一定需要考虑默认参数值或可选属性.(在这种情况下,这些方法的行为方式与标准方法完全相同,要求在调用站点明确声明所有参数.)

公共语言规范(CLS)允许使用默认参数的方法; 但是,CLS允许编译器忽略分配给这些参数的值.为忽略默认参数值的编译器编写的代码必须为每个默认参数显式提供参数.要在编程语言中保持所需的行为,使用默认参数的方法应替换为提供默认参数的方法重载.

(摘自"CA1026:不应使用默认参数"的文档.)


Dav*_*nan 8

我将您的问题解释为可选参数.

如果是这样,那么我相信它们是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());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

编译时没有任何警告.

  • @LukeH谢谢.也许我们需要能够写出`CLSCompliant(sort-of)`;-) (3认同)