文章收藏-FAQ 位置:电脑学习网

创建和使用不定数目参数的函数

    象 C 和 C++ 这样的语言提供了很多手段用于创建和使用一个接受不定数目参数的函数,最典型的例子就是 printf()函数:

    int printf(char *format, …);  //省略号表示参数数目不定

    使用这个函数十分的简单:

    printf(“Hello, world\n“);
    printf(“The sum of %d and %d is %d\n“, a, b, a+b);

    不过,使用这些语言创建这样的函数必须依赖于一系列预先定义的宏,而且往往并不具有直观性和优雅性。
    通过运用参数数组,C#提供了一种解决这个问题的优雅的解决方案。参数数组是一个一维数组,它作为方法的最后一个参数出现在参数列表中:

  public string Concat(string separator, params string[] strings)
  {
     string result = ““;
     for (int i = 0; i 〈 strings.Length; i++)
     {
        if (i 〉 0)
           result += separator;
        result += strings[i];
     }
     return result;
  }

上面的方法用于将一些字符串连接成一个字符串,这个方法可以以下面两种不同的方式调用:

1) 使用数组实例作为参数传递给方法:
    string[] names = { “Anders“, “Eric“, “Scott“, “Duncan“ };
    MessageBox.Show(Concat(“+“, names) + “ = great team“);

2)使用0个或多个类型相容的参数传递给方法:

    MessageBox.Show(Concat(“+“, “Anders“, “Eric“, “Scott“, “Duncan“) + “ = great team“);

    使用第二种方法调用方法时,会先使用这些类型相容的参数(上例中指的是第一个参数后面所有的参数)创建一个数组,然后把这个参数数组作为真正的实参传递给方法。从这一点可以看出:事实上,上面两种方法传递实参的机制完全相同,只是表现手法不同而已。
    得益于.NET统一的类型系统(所有类型都从object继承,因此可以利用多态性原理实现类型的统一处理),定义方法时可以将object[]作为任何类型的代名称定义为参数数组,调用方法时使用具体的类型调用:

  public int SumTheIntegers(params object[] list)
  {
   // sum all the integers included in list
    int sum = 0;
    foreach (object o in list)
        if (o.GetType() == typeof(int))
            sum += (int) o;
    return sum;
  }

     [文章来源:“十万个为什么”电脑学习网]
     [网络地址:http://why100000.com]
     [版权声明:除本站部分特别声明禁止转载的专稿外,其他的文章可以自由转载,但请务必注明出处和原始作者。本站文章版权归文章原作者所有。如果本站转载的文章有版权问题请联系本站,我们会尽快予以更正。]
 

【字体:[大] [中] [小] 【加入收藏】 【发表评论】 【关闭本窗口】

Copyright © “十万个为什么”电脑学习网 2000-2007 陕ICP备06007929号
站务联系:MSN & Email:zhangking2008@gmail.com  QQ:9365822