zoukankan      html  css  js  c++  java
  • c#基础之长度可变类型相同的参数列表

    为了简化编码,c#提供了一个特殊的关键字params,允许在调用方法时提供数量可变的实参,而不是由方法实现固定好的形参数量。先看代码吧。

    using System;
    using System.Linq;
    using System.IO;
    class HelloWorld {
    
        static void Main() {
            string fullName;
    
            fullName = Combine(Directory.GetCurrentDirectory(), "bin", "config", "index.html");
            Console.WriteLine(fullName);
    
            fullName = Combine(Environment.SystemDirectory, "bin", "xindex.html");
            Console.WriteLine(fullName);
    
            fullName = Combine(new string[] { "C:", "data", "index.html" });
            Console.WriteLine(fullName);
            Console.ReadLine();
        }
        public static string Combine(params string[]paths){
            string result=string.Empty;
            foreach (string path in paths) {
                result = System.IO.Path.Combine(result, path);
            }
            return result;
        }
    }

    第一个Combine()调用了四个参数。第二个调用了3个参数,最后一个调用中,参数用一个数组来代替。换言之,Combine()方法接受数量可变的参数,这些参数要么是以逗号隔开,要么是单个字符串数组,前者的语法成为方法调用的”展开形式“,后者称为正常形式。

    为了获得这样的效果 Combine()方法需要:

    (1) 在方法的最后一个参数之前添加params关键字。

    (2)将最后一个参数声明为数组。

    调用System.IO.Path.Combie()方法,该方法能自动合并路径中的不同部分,并能正确使用平台的特有的目录分隔符,注意Combine()完全等价于这个方法,处理参数数量可变的参数。而不是只能处理两个。

    可变参数要注意下面这些地方:

    ~参数数组不一定是方法的唯一参数,但必须是方法声明的最后一个参数。由于只有最后一个参数才可能是参数数组,所以方法最多只有一个参数数组。

    ~调用者可以指定和参数对应的零个实参,这会造成传递的参数数组包含零个数据项。

    ~参数数组是类型安全的,实参的类型必须兼容于参数数组元素的类型。

    ~调用者可以显示的使用数组,而不是以逗号分隔的参数列表,最终生成的CIL代码是一样的。

    ~假如目标的实现要求一个最起码的参数数量,请在方法声明中显示指定必须提供的参数。这样如果遗漏要求的参数,会导致编译器报错,而不需要依赖运行时错误处理,例:

    如果一个方法要求一个或多个整型实参,那就应该使用int Max(int first,params int[] operands)来声明这个方法,而不是使用int Max(params int[] operands)来声明,这样确保至少有一个整数实参传给Max();

    使用参数数组,可以将类型相同类型的,数量可变的多个参数传给方法。 在后面会讨论如何支持不同类型的,数量可变的参数。


  • 相关阅读:
    第03组 Alpha冲刺(3/4)
    第03组 Alpha冲刺(2/4)
    第03组 Alpha冲刺(1/4)
    课程总结
    第十四周学习总结&实验报告
    第十三周课程总结
    第十二周学习总结
    第十一周课程总结
    第十周课程总结
    第九周课程总结&实验报告(七)
  • 原文地址:https://www.cnblogs.com/likeFlyingFish/p/5345994.html
Copyright © 2011-2022 走看看