C# 方法

简介

C#方法:函数就是把一系列相关的代码组织(封装)到一起,用于执行一系列的任务的代码块


 一个方法分为两部分: 1. 方法的定义(声明)   2.方法的调用(执行)

方法的调用:在方法的名字后面添加()  ()称之为执行运算符
 

方法的定义:

           一个方法一般情况下,写在一个类中
          格式: 访问修饰符  返回值类型 方法的名字 (参数列表)                                                                       {
           这个方法的代码块
          }
         访问修饰符: public  """暂且先记住这一个"""
         返回值类型: void  没有返回值
         方法的名字 :自定义,一个以大驼峰命名(见名知意)

 注意: 方法在声明之后,会发现无法再Main中使用,因为Main是静态方法,Test不是静态方法,所以两个方法之间是不互通的,只能把Test修饰成静态方法
 特别注意!!!! 不是所有的方法都需要static关键字修饰成静态方法

​
 static void Main(string[] args)
        {
            Test();
        }

//方法的调用需要在Main函数中去调用
 public static void Test()
        {
            Console.WriteLine("我在C#中学习到的第一个方法");
        }

​

方法的参数

当我们定义了一个方法的时候,在使用的过程中会发现无法在调用过程去更改里面的值,只能在方法的内部去更改初始值,这时就需要用到了方法的参数,默认情况下方法是可以没有参数也就是无参方法,当需求不再适合无参方法时,就会用到有参方法,而有参方法不仅可以接受一个参数,也可以接受多个参数

参数分为两种:形参和实参

形参: 形式参数,方法在定义的时候,声明在()里面的变量,这个形参的值由实参决定
实参: 实际参数,方法在调用的时候,写在()中的数据,这个数据将会赋值给对应的形参

 static void Main(string[] args)
        {
            
            MyWrite2(1);
            MyWrite3(2, "上午");
            MyWrite3(5, "下午");
            
        }
       
        
        // 一个参数:打印count次数的吃饭了 
        public static void MyWrite2(int count)
        {
            for (int i = 0; i < count; i++)
            {
                Console.WriteLine("吃饭了");
            }
        }
        
        
        //  多个参数的方法:打印conut次数的name
        public static void MyWrite3(int count,string name)
        {
            for (int i = 0; i < count; i++)
            {
                Console.WriteLine(name);
            }
        }

方法参数的赋值

方法参数的赋值分为两种:值类型、引用类型

值类型:
            方法调用的时候,如果传入的是变量,或者是表达式,都会先进行计算,然后再传递
            也就是说,方法调用传递变量,传递过去的是这个变量的值,而不是变量本身

  引用类型

            当给方法传递一个引用类型的时候,传递的也是这个变量的值
            只不过引用类型的变量存储的数据的内存地址,所以传递进去的也是内存地址,相当于两个地方操作的是一个内存地址,一个改变,另一个也会发生改变

static void Main(string[] args)
        {
            Test1(10);
            //原理
            int c = 2;
            int b = c;
            b = 20;
            Console.WriteLine($"c=={c}");

            
            People p1= new People() { Name="李四"};
            Test2(p1);
            Console.WriteLine(p1.Name);//张三

            //原理:
            People p2 = new People() { Name = "李四" };
            People p3 = p2;
            p3.Name = "张三;
            Console.WriteLine(p2.Name);         


        }
        public static void Test1(int x)
        {
            Console.WriteLine($"传入的参数为{x}");
            x = 20;

        }
        public static void Test2(People p)
        {
            Console.WriteLine($"传入的参数p.name为{p.Name}");
            p.Name = "张三";

        }
    }

    //创建的一个类

    class People
    {
        public string Name;
    }

引用传参

 方法传递参数有两种方案:
 值传递:(值参数):方法默认的传递方式,这种方式调用方法,会在方法执行的时候,声明一个新的变量接收一个参数,实参的值会赋值给这个新的变量,当我们传递的数据类型不同的时候,也会出现不同的效果
 当传递的是一个值类型的数据的时候,方法内部修改形参,不会影响外部,当传递的是一个引用类型的数据的时候,方法内部修改形参,会影响外部
引用传递(引用传参):当传递一个基本数据类型的时候,方法内部修改形参,会影响外部
当方法内部需要修改传递进来的变量的时候,就需要使用引用传递

 static void Main(string[] args)
        {

            int x = 88888;
            //使用引用传递的时候,传递变量就是传递的这个变量本身,而不是变量里面保存的值

            Test(ref x);//传递参数的时候,必须加上ref关键字
            Console.WriteLine("x:"+x);


            //需求:定义一个函数,交换a和b的值
            int a = 6666;
            int b = 7777;

            Huan(ref a, ref b);
            Console.WriteLine(a);
            Console.WriteLine(b);

        }
        //给方法的某个形参的前面加上ref关键字,这个参数就将进行引用传递(直接传递变量本身)
        public static void Test( ref int a)
        {
            Console.WriteLine("参数"+a);
            a = 9999;
        }
        public static void Huan( ref int x,ref int y)
        {
            (x, y) = (y, x);
        }

 总结:
 方法内部修改形参的时候,外部是否会收到影响

 1. 看方法内部是怎么样改的 如果是  形参=xxx 外部不会受到影响
                                              如果是  形参.xxx=xxxx 外部受影响
 2. 如果使用的是引用传递(ref) 内部使用 形参=xxx 外部也会受到影响

方法的返回值

方法的返回值:方法通过返回值将方法内部计算的结果返回给调用的地方,需要在定义方法的位置,指定方法的返回值类型,如果没有返回值 写void   

需要注意的是:当方法在定义时添加了返回值的类型,那么方法内部就必须要有返回对应类型的数据

static void Main(string[] args)
        {
                        
            string str  =  Test();
            Console.WriteLine(str);


            //需求:定义一个函数,传入两个参数,返回两个参数的和

            int a = 100;
            int b = 200;
            Console.WriteLine(Sum(a,b));

        }
       
        public static string Test()
        {
            //注意:方法标注了返回值类型,那么这个方法内部就必须要返回对应类型的数据
            return "张三123";
        }
        public static int Sum(int x,int y)
        {
            //return 关键字不仅可以用于返回数据,还可以用于终止方法的执行
            //return 关键字后面的代码不会执行
            return x + y;
           // Console.WriteLine(x+y);
        }

  

输出参数与输入参数

              ref 输入关键字
              out 输出关键字
              return 关键字用于返回方法执行的结果,但是只能返回一个数据,如果需要同时返回多个数据到调用的时候,就可以使用输出关键字

两者之间的区别:

             1.out传递参数,可以不同赋值
             2.out传递的参数,在方法中必须赋值
             3.ref传递参数,可以在方法中获取值,out传递参数,只能在赋值之后取值(out不能传递进去数据)
             ref 的主要作用是为了传入数据,因此传入的时候必须进行赋值
             out的主要作用是为了传出数据,因此在传入的的时候可以不进行初始化.并且在方法中必须赋值
             

总结:ref 可以把值传到方法里,也可以把值传到方法外;out 只可以把值传到方法外

注意:string 作为特殊的引用类型,其操作是与值类型看齐的,若要将方法内对形参赋值后的结果传递出来,需要加上ref 或 out 关键字。

         static void Main(string[] args)
        {

            int a = 1;
            int b = 2;
            Test1(ref a, ref b);
            Console.WriteLine($"a=={a},b=={b}");

            int c;
            int d;
            Test2(out c, out d);
            Console.WriteLine($"c=={c},d=={d}");
        }
        public static void Test1(ref int x ,ref int y)
        {
            Console.WriteLine($"Test1方法中x:{x}y:{y}");
            x = 30;
            y = 40;
        }
        public static void Test2(out int x, out int y)
        {
            x = 30;
            y = 40;
            Console.WriteLine($"Test2方法中x:{x}y:{y}");
        }

参数列表

一个方法除了可以接收固定个数的参数外,还可以接收未知数量的参数

当我们需要参数要求多的时候就可以去使用参数列表,如果当一味的只使用多参数方法,会使我们的代码量变大,代码变得臃肿,而使用参数列表就可以使代码变得整洁,方便我们查询和解决bug

优点:代码整洁

           当需求变换时不必再去修改方法

 格式:params 数据类型[] 参数的名字

static void Main(string[] args)
        {
            //一个方法除了可以接收固定个数的参数外,还可以接收未知数量的参数
            Sum(10,20,20,5);

            Console.WriteLine(Sum(101,20, 5));
            Test(1, "a", "d", "a");
        }

        //参数列表的格式 : params 数据类型[] 参数的名字
        public static int Sum(params int[] nums)
        {
            int sum = 0;    
            //获取参数的长度,就是参数的个数
            Console.WriteLine(nums.Length);//3
            //索引 获取参数列表的某一个值  索引从0开始  0 表示获取第一个值 1表示获取第二个值....
            //Console.WriteLine(nums[0]);
            //Console.WriteLine(nums[1]);
            //Console.WriteLine(nums[2]);
            //Console.WriteLine(nums[3]);

            for (int i = 0; i < nums.Length; i++)
            {
                Console.WriteLine(nums[i]);
                // sum = sum + nums[i];
                sum += nums[i];
            }
            return sum;

        }
        public static void Test(int a,string s,params string[] str)
        {

        }


         

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值