1.方法返回值internal class Program { static void Main(string[] args) { //调用不带返回值的Test1方法只能在方法体里面打印和的值不能把30拿到方法体外进行使用 Test1(10, 20); //调用带返回值的方法Test2 int s1 Test2(99, 99); Console.WriteLine(s1); //调用返回值为对象类型的Test3的方法 Student zs Test3(张三); Console.WriteLine(zs.Name); //调用Max方法 Console.WriteLine(Max(1,1,9)); } //定义计算两个数字相加的方法 public static void Test1(int a,int b) { int sum a b; Console.WriteLine(sum); } //有返回值的方法的定义方式把void改成返回值的类型 //有返回值的方法一定要添加return关键字 return后面数据类型一定和返回值类型保持一致 //计算数字和 返回值类型可以写成int public static int Test2(int a,int b) { int sum a b; return sum; //return返回 得到 跳出方法体return类型和方法返回值类型保持一致 } //返回值是一个对象 并且是一个学生对象 //返回值类型为Student 传递参数字符串类型 //要求把参数赋值给对象的属性上 public static Student Test3(string n) //n值张三 { //1.先定义一个Student类型的数据就是Student对象 Student zhangsan new Student();//对象为空的话 把未将对象引用设置到对象的实例。对象没new的原因 zhangsan.Name n; return zhangsan; } //定义一个函数输入三个值找出三个数中最大值 public static int Max(int a, int b, int c) { int max 0; int temp a; temp a b ? b : a;//temp是a,b中最大值 max temp c ? c : temp; return max; } } public class Student { public string Name { get; set; } }2.方法值传递namespace _2.方法值传递 { internal class Program { static void Main(string[] args) { //调用方法在传递参数时候会发生值传递和引用传递 //默认情况下发生值传递 //值传递传递参数是值类型和引用类型表现不一样 //分两种情况去描述 //1.值传递传递是值类型的时候把实参的值拷贝一份赋值给形参在方法体里面修改形参的值不会影响调用时候实参的值。 int a1 10; Test1(a1);//把实参传递给形参 把a1赋值a Console.WriteLine(al的值是a1); //2.值传递传递是引用类型的时候:把实参对象地址赋值给形参形参和实参指向同一个地址证明是同一个对象。 //如果在方法中通过对象.属性这种方式进行修改的时候会影响到实参的对象值 //如果在方法中通过new 创建对象的方法改变整个对象不会影响到实参的值 People p1 new People() {Name张三 }; Test2(p1);//修改了对象的属性值 Console.WriteLine(p1对象name值p1.Name);//如果出现李四是第一种修改的结果 } //传递的参数类型是值类型 public static void Test1(int a ) { Console.WriteLine(a修改之前的值a); a 20;//修改a的值 } //传递参数是引用类型 public static void Test2(People p) //pp1 { Console.WriteLine(修改之前p.Name);//张三 //修改传递过来实参的两种方式 //第一种修改:对象.属性这种方式进行修改 //p.Name 李四; //第二种修改 修改形参的指向 p与传递过来就不在同一个对象 如果使用这种改成name李四 不影响外边的实参的对象的值 p new People() { Name 李四 }; } } public class People { public string Name { get; set; } } //值传递传递进方法中的是值在方法内部修改不会影响到外部 //使用对象名.属性的方式修改影响到外部使用new 创建对象方式不会影响外部实参 }3.引用传递ref参数实现internal class Program { static void Main(string[] args) { //引用传递在方法内部修改形参值会影响到外部实参的值 int a1 10; //ref参数必须赋初始值 Test1(ref a1); //如果参数有ref关键字需要调用的时候实参前面添加ref关键字 Console.WriteLine(a的值为a1); //20 //验证参数是对象类型的时候前提参数使用ref关键字进行修饰不管对象.属性方式修改还是整体new对象方式修改 都会影响到实参。 People p1 new People() { Name烧饼}; Test2(ref p1); Console.WriteLine(p1.Name);//对象.属性方式进行修改的话 这地方也会跟着变化武大郎 //如果通过new修改整体对象 这地方也会跟着变化武大郎 } //ref关键字的作用 把形参传值改成引用类型传值的形式通俗讲把方法内部形参和外部实参表示同一个 public static void Test1(ref int a) { a 20;//此处修改是否影响到外部a1值 } //传递People类型 public static void Test2(ref People a) { //第一种修改 对象.属性进行 a.Name 武大郎; //第二种方式 通过new的方法修改整个对象 anew People() { Name 武大郎}; } } public class People { public string Name { get; set; } } } //值传递和引用传递的区别 //值传递 在方法内部修改变量不会影响到外部如果对象.属性这种方式会影响到外部 //引用传递必须有ref在方法内部修改变量会影响到外部4.out参数namespace _4.out输出参数 { internal class Program { static void Main(string[] args) { //out参数作用 //1.如果想一个方法有多个返回值的话可以使用out //2.也可以实现引用传递的特点 //3.需要在方法内部初始化 //4.在调用时候可以不用初始化 int a1 30; int b1 40; Test1(out a1,out b1); Console.WriteLine(a1的值a1;b1的值b1); int a2 0; int b2 0; Test2(ref a2,ref b2); Console.WriteLine(a2:b2);//10000 10000 } //使用out输出参数定义方法的时候 先在参数前添加out关键字 //out参数必须在方法内部赋初始值 public static void Test1(out int a,out int b) { a 90;//修改a b 90;//修改b a a b;//和180 b(ab)*b;//乘积8100 } public static void Test2(ref int a, ref int b) { a 10000; b 10000; } } } //总结:ref和out的区别: //1.ref传递参数,必须赋值,out传递参数,可以不用赋值 //2.ref传递的参数,在方法中可以不用赋值,out传递的参数,在方法中必须赋值 //3.ref传递的参数,可以直接在方法中取值,out传递的参数,必须在赋值之后才能取值 //ref的主要作用是为了传入数据,因此传入的时候必须赋值 //out的主要作用是为了传出数据,因此在传入的时候,可以不用赋值,但是在方法中必须赋值5.in参数namespace _5.in { internal class Program { static void Main(string[] args) { Test1(10); People p1 new People() { Name 李四 }; Test2(p1); Console.WriteLine(p1.Name); //值传递通过属性进行修改的话 会影响到外部 } public static void Test1(in int a) { //a 100;//in 使参数变成只读的 不能修改 int sum a 19; Console.WriteLine(sum); } //in 作用对象可以通过改属性值可以修改 //in 作用对象对形参整体不能修改 public static void Test2(in People a) { //1只改属性值 可以修改 //a.Name foo; //2 修改形参指向 new新的 报错 //a new People() { Name foo }; } } public class People { public string Name { get; set; } } }6.参数列表paramsnamespace _6.参数列表params { internal class Program { static void Main(string[] args) { //params int[] a: //params参数列表 允许传递不定数量的参数 //int[] a参数a就是整型的容器可以存储多个整型的数 // a.Length 就是容器的长度 //string[] a 存放字符串的容器 //bool[] b 存放bool的容器 //Test1(1);//a.Length的长度1 // Test1(1, 2);//a.Length2 Test1(1, 2, 4, 4, 4, 4, 4, 4, 4, 4, 44);//a.Length11 Test2(10, 20, 30, 40, 50); } public static void Test1(params int[] a) { //Console.WriteLine(a.Length) ; // 最大下标 a.Length-1; //Console.WriteLine(a[0]); //访问每一个参数时候 通过参数的下标进行访问 下标从0开始 //Console.WriteLine(a[a.Length-1]);//取最后一个参数 //取出所有的参数 for (int i 0; i a.Length; i) { Console.WriteLine(a[i]); } } public static void Test2(int a, int b, params int[] c)// a 10 ,b20; { Console.WriteLine(c[0]);//30 } } }
c#方法总结
发布时间:2026/5/20 21:35:13
1.方法返回值internal class Program { static void Main(string[] args) { //调用不带返回值的Test1方法只能在方法体里面打印和的值不能把30拿到方法体外进行使用 Test1(10, 20); //调用带返回值的方法Test2 int s1 Test2(99, 99); Console.WriteLine(s1); //调用返回值为对象类型的Test3的方法 Student zs Test3(张三); Console.WriteLine(zs.Name); //调用Max方法 Console.WriteLine(Max(1,1,9)); } //定义计算两个数字相加的方法 public static void Test1(int a,int b) { int sum a b; Console.WriteLine(sum); } //有返回值的方法的定义方式把void改成返回值的类型 //有返回值的方法一定要添加return关键字 return后面数据类型一定和返回值类型保持一致 //计算数字和 返回值类型可以写成int public static int Test2(int a,int b) { int sum a b; return sum; //return返回 得到 跳出方法体return类型和方法返回值类型保持一致 } //返回值是一个对象 并且是一个学生对象 //返回值类型为Student 传递参数字符串类型 //要求把参数赋值给对象的属性上 public static Student Test3(string n) //n值张三 { //1.先定义一个Student类型的数据就是Student对象 Student zhangsan new Student();//对象为空的话 把未将对象引用设置到对象的实例。对象没new的原因 zhangsan.Name n; return zhangsan; } //定义一个函数输入三个值找出三个数中最大值 public static int Max(int a, int b, int c) { int max 0; int temp a; temp a b ? b : a;//temp是a,b中最大值 max temp c ? c : temp; return max; } } public class Student { public string Name { get; set; } }2.方法值传递namespace _2.方法值传递 { internal class Program { static void Main(string[] args) { //调用方法在传递参数时候会发生值传递和引用传递 //默认情况下发生值传递 //值传递传递参数是值类型和引用类型表现不一样 //分两种情况去描述 //1.值传递传递是值类型的时候把实参的值拷贝一份赋值给形参在方法体里面修改形参的值不会影响调用时候实参的值。 int a1 10; Test1(a1);//把实参传递给形参 把a1赋值a Console.WriteLine(al的值是a1); //2.值传递传递是引用类型的时候:把实参对象地址赋值给形参形参和实参指向同一个地址证明是同一个对象。 //如果在方法中通过对象.属性这种方式进行修改的时候会影响到实参的对象值 //如果在方法中通过new 创建对象的方法改变整个对象不会影响到实参的值 People p1 new People() {Name张三 }; Test2(p1);//修改了对象的属性值 Console.WriteLine(p1对象name值p1.Name);//如果出现李四是第一种修改的结果 } //传递的参数类型是值类型 public static void Test1(int a ) { Console.WriteLine(a修改之前的值a); a 20;//修改a的值 } //传递参数是引用类型 public static void Test2(People p) //pp1 { Console.WriteLine(修改之前p.Name);//张三 //修改传递过来实参的两种方式 //第一种修改:对象.属性这种方式进行修改 //p.Name 李四; //第二种修改 修改形参的指向 p与传递过来就不在同一个对象 如果使用这种改成name李四 不影响外边的实参的对象的值 p new People() { Name 李四 }; } } public class People { public string Name { get; set; } } //值传递传递进方法中的是值在方法内部修改不会影响到外部 //使用对象名.属性的方式修改影响到外部使用new 创建对象方式不会影响外部实参 }3.引用传递ref参数实现internal class Program { static void Main(string[] args) { //引用传递在方法内部修改形参值会影响到外部实参的值 int a1 10; //ref参数必须赋初始值 Test1(ref a1); //如果参数有ref关键字需要调用的时候实参前面添加ref关键字 Console.WriteLine(a的值为a1); //20 //验证参数是对象类型的时候前提参数使用ref关键字进行修饰不管对象.属性方式修改还是整体new对象方式修改 都会影响到实参。 People p1 new People() { Name烧饼}; Test2(ref p1); Console.WriteLine(p1.Name);//对象.属性方式进行修改的话 这地方也会跟着变化武大郎 //如果通过new修改整体对象 这地方也会跟着变化武大郎 } //ref关键字的作用 把形参传值改成引用类型传值的形式通俗讲把方法内部形参和外部实参表示同一个 public static void Test1(ref int a) { a 20;//此处修改是否影响到外部a1值 } //传递People类型 public static void Test2(ref People a) { //第一种修改 对象.属性进行 a.Name 武大郎; //第二种方式 通过new的方法修改整个对象 anew People() { Name 武大郎}; } } public class People { public string Name { get; set; } } } //值传递和引用传递的区别 //值传递 在方法内部修改变量不会影响到外部如果对象.属性这种方式会影响到外部 //引用传递必须有ref在方法内部修改变量会影响到外部4.out参数namespace _4.out输出参数 { internal class Program { static void Main(string[] args) { //out参数作用 //1.如果想一个方法有多个返回值的话可以使用out //2.也可以实现引用传递的特点 //3.需要在方法内部初始化 //4.在调用时候可以不用初始化 int a1 30; int b1 40; Test1(out a1,out b1); Console.WriteLine(a1的值a1;b1的值b1); int a2 0; int b2 0; Test2(ref a2,ref b2); Console.WriteLine(a2:b2);//10000 10000 } //使用out输出参数定义方法的时候 先在参数前添加out关键字 //out参数必须在方法内部赋初始值 public static void Test1(out int a,out int b) { a 90;//修改a b 90;//修改b a a b;//和180 b(ab)*b;//乘积8100 } public static void Test2(ref int a, ref int b) { a 10000; b 10000; } } } //总结:ref和out的区别: //1.ref传递参数,必须赋值,out传递参数,可以不用赋值 //2.ref传递的参数,在方法中可以不用赋值,out传递的参数,在方法中必须赋值 //3.ref传递的参数,可以直接在方法中取值,out传递的参数,必须在赋值之后才能取值 //ref的主要作用是为了传入数据,因此传入的时候必须赋值 //out的主要作用是为了传出数据,因此在传入的时候,可以不用赋值,但是在方法中必须赋值5.in参数namespace _5.in { internal class Program { static void Main(string[] args) { Test1(10); People p1 new People() { Name 李四 }; Test2(p1); Console.WriteLine(p1.Name); //值传递通过属性进行修改的话 会影响到外部 } public static void Test1(in int a) { //a 100;//in 使参数变成只读的 不能修改 int sum a 19; Console.WriteLine(sum); } //in 作用对象可以通过改属性值可以修改 //in 作用对象对形参整体不能修改 public static void Test2(in People a) { //1只改属性值 可以修改 //a.Name foo; //2 修改形参指向 new新的 报错 //a new People() { Name foo }; } } public class People { public string Name { get; set; } } }6.参数列表paramsnamespace _6.参数列表params { internal class Program { static void Main(string[] args) { //params int[] a: //params参数列表 允许传递不定数量的参数 //int[] a参数a就是整型的容器可以存储多个整型的数 // a.Length 就是容器的长度 //string[] a 存放字符串的容器 //bool[] b 存放bool的容器 //Test1(1);//a.Length的长度1 // Test1(1, 2);//a.Length2 Test1(1, 2, 4, 4, 4, 4, 4, 4, 4, 4, 44);//a.Length11 Test2(10, 20, 30, 40, 50); } public static void Test1(params int[] a) { //Console.WriteLine(a.Length) ; // 最大下标 a.Length-1; //Console.WriteLine(a[0]); //访问每一个参数时候 通过参数的下标进行访问 下标从0开始 //Console.WriteLine(a[a.Length-1]);//取最后一个参数 //取出所有的参数 for (int i 0; i a.Length; i) { Console.WriteLine(a[i]); } } public static void Test2(int a, int b, params int[] c)// a 10 ,b20; { Console.WriteLine(c[0]);//30 } } }