• C#中的方法


    普通方法的定义:无参无返回值。
    void sun()
    {
        Console.WriteLine("这是一个函数,也叫一个方法(无参无返回值)");
    }
    sun(); //在同一个类中,不需要实例化,即可直接调用,这种叫函数调用。
    Pro p = new Pro();
    p.sun();//类外方法调用,其实这里也是一个类,C#只有方法没有函数,也可以说函数就是方法。
    
    class Pro 
    {
        public void sun() { Console.WriteLine("Python有这样一句话:类中定义叫方法,类外定义叫函数。"); }
    }

    有参有返回值:另外【有参无返回值,无参有返回值】这两种不在做演示

    Pro p = new Pro();
    string s = p.sun("void空,无返回值;改string就是返回一个字符串,带返回值的方法必须return");//实参可以不用传值,返回默认值实参
    Console.WriteLine(s);  
    class Pro 
    {
        public string sun(string str, int i=0) //str是形参,i是实参,实参必须定义在行参后面
        { 
            return str + i; //返回的是字符串string
        }
    }

    命名参数:改变传递时参数的位置

    Pro p = new Pro();
    string s = p.sun(i: 11, str: "利用命名参数指定传递,改变参数位置。");
    Console.WriteLine(s);
    class Pro
    {
        public string sun(string str, int i ) //正常传递,是先str,在传i
        {
            return str + i; 
        }
    }

    一、方法参数传递关键字:ref,out,params

    栈:存放值类型会被初始化;堆:存放引用类型的不会被初始化数据。
    将值类型改为引用类型传递:【ref关键字和out关键字】,两个意思是一样的只是使用方法不一样。
    ref和out的区别

    //ref:传递前必须初始化赋值,有进有出
    int a = 10;
    ChangeNum(ref a);//方法也需要有ref关键字
    Console.WriteLine("\n关键字ref下的a = {0}", a);//此时a = 11  
    
    static void ChangeNum(ref int num)//传参时也需要有ref关键字
    {
        num++;//ref,在方法体中可以不对变量赋值,返回的就是初始化的值,不会报错。
    }
    
    //out:传递前不需要赋值,只出不进。
    int i;
    ChangeNum2(out i);
    Console.WriteLine("\n关键字out下的i = {0}", i);
    
    static void ChangeNum2(out int num)
    {
        num = 111; //out规定:方法体返回前必须给变量赋值。否则会报错。
    }
    params多参数传递:不能与ref、out修饰同一个参数,不能一起使用,且params必须定义最后一个参数,当数组传递。
    Testt("params多参数传递,", 99, 88, 77, 44, 55, 66);//params会自动识别为同类型数据,这里自动识别为一个数组,或者直接传一个数组也可以
    
    static void Testt(string str, params int[] a)//params关键字必须是最后一个参数,不要给数组定义长度。
    {
        int sum = 0;
        foreach (int i in a) { sum += i; }
        Console.WriteLine("{0}这个班的总成绩是:{1}", str, sum);
    }

    二、方法重载

    方法名相同,参数不同。

    Pro p = new Pro();
    p.sun();
    string s = p.sun("只要方法名相同,参数不同都叫方法重载,跟有无返回值无关");
    Console.WriteLine(s);
    class Pro
    {
        public void sun()
        {
            Console.WriteLine("方法重载");
        }
        public string sun(string str)
        {
            return str;
        }
    }

    三、构造方法

    与类同名的方法,不能有返回值,可以重载

    Pro p = new Pro();//默认无参构造实例化,调用时自动运行
    Pro p2 = new Pro("构成方法用于传递初始化数据");
    Console.WriteLine(p2.str);
    
    class Pro
    {
        public Pro()
        {
            Console.WriteLine("每个类默认自带无参构造,当定义了有参后,隐藏的无参构造就消失,代码需要重新写上无参才生效。");
        }
        public Pro( string str1) //str1只作用方法体内,str作用于整个类
        {
            this.str = str1; //this表示当前类
        }
        public string str ="";//字段
    }

    四、回调函数

    相当于循环,方法掉用方法本身,自己调用自己。

    sun();
    
    void sun()
    {
        Console.WriteLine("没有条件判断,直接回调就是死循环");
        sun();//自己调用自己
    }

     五、匿名方法

    匿名函数也叫【lamdba表达式】,语法:(参数列表)=>{方法体}
    对典型的:()=>{ } //无参无返回值

    Func<int, int, int> f  = (a, b) => { return a * b; }; //两个参数一个返回值,因为方法需要调用所以需要配合委托来学习。
  • 相关阅读:
    编译KlayGE所需要的第三方库和工具下载
    KlayGE启用顶级域名
    Sophus和Eigen 李群李代数 简单介绍
    G2O曲线拟合1
    梯度下降
    PCL1.8单张图点云转换显示
    双目测距demo
    Kinect基于微软SDK彩图与深度图对齐
    单例模式
    zendstudio卡死
  • 原文地址:https://www.cnblogs.com/longxinyv/p/16786708.html
Copyright © 2020-2023  润新知