zoukankan      html  css  js  c++  java
  • C#之方法的声明与调用

    //params关键字使用   

    class Program { static void Main(string[] args){ int[] arr = { 10, 20, 30,60 }; Console.WriteLine(AddFunction(arr)); Console.WriteLine(AddFunction(10,20,30,60)); Console.ReadKey(); } static int AddFunction(params int[] values ) { int temp = 0; foreach (var item in values) { temp += item; } return temp; }

    实现了一个AddFunction方法,用于接收一组整数,并返回它们的和。参数values被加上params关键字后,在调用时可以在实参列表中列举出这组整数中的每个元素,非常方便。
    关于params关键字的用法,需要注意以下几点:
    1. params只能用于一维数组,不能用于多维数组和诸如ArrayList、List<T>等任何类似于数组的集合类型。
    2. 被加上params关键字的形参,必须是形参列表中最后一个形参,并且方法声明中只允许一个 params 关键字。
    3. 用params关键字的方法,有三种调用形式:
    第一种,列举出数组各元素:AddFunction(1,2,3),这也是最常用的形式;
    第二种,像没有加params关键字的数组形参那样,用数组名做实参:AddFunction(new int[]{1,2,3})或int n=new int[]{1,2,3};AddFunction(n);;
    第三种,加params关键字的参数在调用时可以省略:AddFunction();//返回0;这种方式有时可以少定义一个方法重载,但当明确定义了重载int AddFunction()时,编译器会优先调用int AddFunction(),而不是AddFunction(params int[] values)。而且省略params型参数,方法内部仍会new一个元素个数为0的数组,效率略查。
    第四种,不省略params型参数,用null代替,效率比第三种略高,因为其内部不会new这个数组。

    ref关键字使用

            static void Main(string[] args){
    
                string ss = "1-425-42-4-2-5";
                change(ref ss);
                Console.WriteLine(ss);
                Console.ReadKey();
            }
            static void change(ref string value) {
                string[] strArray = value.Split('-');
                value = String.Join("+",strArray);
            }

    out关键字的使用(经过试验:out,ref可以混用(在注意语法的前提下))

            static void Main(string[] args){
    
                int[] arr = { 50,56,23,45656,146,2353566,1633,22};
                int indexOut = 0;//ref:要初始化,out:不用初始化
                Console.WriteLine("最大值{0},索引是{1}",MaxNumber(arr,ref/*out*/ indexOut),indexOut);
                Console.ReadKey();
            }
    
            static int MaxNumber(int[]values ,ref/*out*/ int index) {
    
                int max = values[0];
                index = 0;
                for (int i = 0; i < values.Length; i++) {
                    if (max < values[i]) {
                        max = values[i];
                        index = i;
                    }         
                }
                return max;
            }

     二者区别与联系

            首先:两者都是按地址传递的,使用后都将改变原来参数的数值。

            其次:ref可以把参数的数值传递进函数,但是out是要把参数清空,就是说你无法把一个数值从out传递进去的,out进去后,参数的数值为空,所以你必须初始化一次。这个就是两个的区别,ref是有进有出,out是只出不进。

            ref 关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数的任何更改都将反映在该变量中。若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字。

            传递到 ref 参数的参数必须最先初始化。这与 out 不同,后者的参数在传递之前不需要显式初始化。

            out 关键字会导致参数通过引用来传递。这与 ref 关键字类似,不同之处在于 ref 要求变量必须在传递之前进行初始化。若要使用 out 参数,方法定义和调用方法都必须显式使用 out 关键字。

    静态方法与实例方法

        静态方法只能访问类中的静态成员,实例方法可以访问类中的任何成员

    虚方法(virtual) 重写虚方法(override)  不允许重写(sealed)外部方法(DllImport)

  • 相关阅读:
    ASP.NET 动态创建文本框 TextBox (add TextBox to page dynamically)
    SQL Server 行列转换
    NPOI把Excel导入到数据库
    Net操作Excel(终极方法NPOI)
    mongdo通用类(C#版)
    ORACLE 定时执行存储过程
    C# Excel导入、导出
    网络爬虫+HtmlAgilityPack+windows服务从博客园爬取20万博文
    Git初级使用教程
    asp.net+swfupload 多图片批量上传(附源码下载)
  • 原文地址:https://www.cnblogs.com/liuguan/p/5912276.html
Copyright © 2011-2022 走看看