命名实参和可选实参(C#)

C# 2010 引入了命名实参和可选实参。 利用“命名实参”,您将能够为特定形参指定实参,方法是将实参与该形参的名称关联,而不是与形参在形参列表中的位置关联。

  利用“可选实参”,您将能够为某些形参省略实参。 这两种技术都可与方法、索引器、构造函数和委托一起使用。

在使用命名实参和可选实参时,将按实参出现在实参列表(而不是形参列表)中的顺序计算这些实参。

命名形参和可选形参一起使用时,您将能够只为可选形参列表中的少数形参提供实参。

命名实参

有了命名实参,您将不再需要记住或查找形参在所调用方法的形参列表中的顺序。 可以按形参名称指定每个实参的形参。

例如,可以采用标准方式调用计算身体质量指数 (BMI) 的函数,方法是依照该函数定义的顺序按位置发送体重和身高的实参。

CalculateBMI(123, 64);

如果不记得形参的顺序,但却知道其名称,您可以按任意顺序(先发送体重或先发送身高)发送实参。

CalculateBMI(weight: 123, height: 64);CalculateBMI(height: 64, weight: 123);

命名实参还可以标识每个实参所表示的含义,从而改进代码的可读性。


例如:

class NamedExample
{
    static void Main(string[] args)
    {
        Console.WriteLine(CalculateBMI(123, 64));

       //命名实参
        Console.WriteLine(CalculateBMI(weight: 123, height: 64));
        Console.WriteLine(CalculateBMI(height: 64, weight: 123));

        //命名实参可以放在位置实参后面,但是位置实参不能放在命名实参后面
        //下面的语句将导致编译错误
        //Console.WriteLine(CalculateBMI(weight: 123, 64));

        Console.WriteLine(CalculateBMI(123, height: 64));
    }
    //此处weight、height 都是形参,实际调用的地方都是实参
    static int CalculateBMI(int weight, int height)
    {
        return (weight * 703) / (height * height);
    }
}

可选实参

方法、构造函数、索引器或委托的定义可以指定其形参为必需还是可选。 任何调用都必须为所有必需的形参提供实参,但可以为可选的形参省略实参。

每个可选形参都具有默认值作为其定义的一部分。 如果没有为该形参发送实参,则使用默认值。 默认值必须为常量。  

可选形参在形参列表的末尾定义,位于任何必需的形参之后。 如果调用方为一系列可选形参中的任意一个形参提供了实参,则它必须为前面的所有可选形参提供实参。 实参列表中不支持使用逗号分隔的间隔。 例如:

 

class OptionalExample    {
        // 命名参数和可选参数
        public static void Search(string name, int age = 21, string city = "Pueblo")
        {
            Console.WriteLine("Name = {0} - Age = {1} - City = {2}", name, age, city);
        }

        static void Main(string[] args)
        {
            // 通用调用方式
            Search("Sue", 22, "New York");

            // 省略city可选参数
            Search("Mark", 23);

            //命名实参
            Search("Lucy", city: "Cairo");

            // 命名参数的顺序和形参顺序不相同
            Search("Pedro", age: 45, city: "Saigon");

           //实参列表中不支持使用逗号分隔的间隔
           //此处将导致编译错误
           //Search("Pedro", ,"Saigon");
        }
    }
IntelliSense 使用括号指示可选形参,如下图所示

注意:还可以通过使用 .NET OptionalAttribute 类来声明可选形参。 OptionalAttribute 形参不需要默认值。



posted @ 2011-04-07 14:33  忆起  阅读(514)  评论(0编辑  收藏  举报