C#值类型与引用类型、 out 、 ref、 params 参数、函数重载、数组为函数参数或返回值
来源:互联网 发布:青少年编程最好的机构 编辑:程序博客网 时间:2024/05/20 11:51
引用类型与值类型的区别:
值类型
ref把一个变量以参数的形式带到一个方法中进行改变,再将改变后的值返回(实参和形参在栈中的地址相同);[栈中也是有地址的]
不加ref,形参和实参是两个量,栈中的地址不同;
值类型的赋值是复制值
引用类型的赋值是复制的地址
1、 在C#中方法是将一堆代码进行重用的一种机制;
若调用类中的方法时,若类与Main()函数在一个类中是,类名可以省略,若不在一个类中,类名不可以省略;
2 、 返回值为数组的函数
public static int [ ] GetNumbers ( int [ ] num){int [ ] res=new int [ 4 ]; res={ 1,2,3,4 }; num[0]=2; // 数组的内容会被改变return res;}
a:在一个方法中,同一个类型的多个值返回时,放到数组中返回即可;若类型不同,可以考虑用Out;
b: 在方法中改变值时,数组是个例外:在方法中改变数组,数组中的值会变。
3、 out
public static void Test ( int [ ] nums, out int max, out int min, out string str) ;
在调用函数是格式:Test(numbers,out max, out min ,out str1);
Test(nuber1,34,34,"hello");
注意: out参数要求在方法的内部为其赋值。
4、 ref 引用
public static void Max(ref int a1, ref int a2)
调用函数格式:Max (ref n1, ref n2) // 形参和实参前面都要有ref
ref参数侧重于将一个值带到函数中进行改变,再将改变的值带出去,ref参数在方法内不用赋值,方法外必须赋值。
注意:ref要求参数在方法之前必须为其赋值。
5、 params 可变参数
将实参列表中跟可变参数数组类型一样的元素都当做数组中的元素;
public static void Test(string str,int id, params int [ ] nums ) // 注意:参数列表中的可变数组必须是形参中的最后一个参数,并且只能有一个可变参数。
调用格式: Test("hello",34,44,33,23,32)
其中参数params int [ ] nums,可以有两种情况: a: 传一个数组,b: 传相同类型的多个数值
注意:参数列表中只能出现一个可变参数(唯一性),并且位于参数列表的最后一个。
6、函数重载
方法名相同,参数不同;
参数个数相同的话,类型应不同;参数类型相同的话,个数应不同。与返回值无关。注意:只有返回值不同不是函数重载。
Console.WriteLine(): 就是一个函数重载。
各个参数的用法
class Hello { static void Main(string[] argvs) { string str1 = "immutable"; string str2; str2 = str1; str2= "another"; // 虽然string是引用类型,但是由于字符串的不可变性,这里str2又指向了新的地址,所以str1与str2的内容分别是“immutable”和“another”,不一样 father fa1 = new father(); fa1.Name = "dad"; father fa2 = new father(); fa2.Name = "Bb"; father fa3 = fa1; // 这里可以看出fa1赋值给fa3,引用类型的传递 fa1.Name = "father and children"; changle(fa1);// 这里返回的引用类型值发生了改变。为:"change father's name" // changeUseRef(ref fa2.Name);//属性、索引器、动态成员访问不可作为out、ref的参数 changeUseRef(ref str2);//改变了str2的值 string Formation; IsLogin("Name","9999",out Formation); int max=0; Test_Params(max,new int[]{1,2,3,4,5});//若方法的形参没有加params,这里实参只能是数组 Test_Params(max, 1, 2, 3, 4, 5);//方法的形参加params,实参可以是数组类型相同的变量 Console.WriteLine("fa1 is content is {0}",fa1.Name ); Console.WriteLine(str2); Console.ReadKey(); } public static void changle(father f) { // 引用类型传递的是地址 f.Name = "change father's name"; // 下面这种方式也是传递地址 father ff = f; ff.Name = "change father's name"; } /// <summary> /// 利用ref改变string的值引用 /// </summary> /// <param name="str"></param> public static void changeUseRef(ref string str) { str = "Use Ref To Change String"; } /// <summary> /// out参数侧重于方法中返回多个参数,out参数要求必须在方法内部为其赋值,此方法可以有返回值 /// </summary> /// <param name="str"></param> /// <param name="num"></param> /// <param name="bo"></param> public static void ReturnMultiRef(out string str,out int num,out bool bo) { str = "UseOutChange"; num = 200; bo = true; } public static bool IsLogin( string Name, string PassWord,out string Information) { if(Name=="Name"&&PassWord=="1111") { Information = "登陆成功"; return true; } else if(Name!="Name") { Information = "用户名输入错误"; return false; }else { Information = "密码输入错误"; return false; } } public static void Test_Params(int max,params int[] nums)//params必须是形参列表的最后一个元素 { max=nums[0]; foreach (var item in nums) { if(item>max) { max = item; } } } } public class father { string _name; public string Name{ get { return _name; } set { _name = value; } } }
- C#值类型与引用类型、 out 、 ref、 params 参数、函数重载、数组为函数参数或返回值
- C#参数类型 params、out和ref
- C#引用类型参数加ref或out与不加ref或out的区别
- C#基础学习--方法参数的种类,值参数,引用参数(ref),输出参数(out),数组参数(params)
- C#的参数类型:params、out和ref
- C#之Action/Func/out/ref/params/类型参数约束
- C# 参考之方法参数关键字:参数数组params、引用参数ref及输出参数out
- C#中ref、out类型参数的区别和params类型参数的用法
- C#中ref、out类型参数的区别和params类型参数的用法
- c# 参数 params ,ref ,out
- C#中引用类型做方法参数时,加ref或out,与不加ref或out到底有什么区别?
- 编写四个重载函数Double(x),返回值为输入参数的两倍;参数类型分别为int,long,float,double,返回值类型与参数类型一致。
- C#基础知识(七)——方法重载与out、ref、params参数
- 数组类型 params参数
- params out ref 参数
- C#中的ref,out,值类型,引用类型的笔记
- C#的方法参数-Params,Ref,Out
- c#参数修饰符ref、out、params
- 一步步学习kotlin for android(一)配置kotlin
- Java基础
- ADAS(2) 各功能模块介绍
- java编程思想阅读笔记之造型检查
- android使用java的反射机制跳转Activity
- C#值类型与引用类型、 out 、 ref、 params 参数、函数重载、数组为函数参数或返回值
- POS 初识
- 【PMP认证考试之个人总结】第 5 章 项目时间管理
- IMWeb提升营Day2 | 训练题7: 斐波那契数列
- Sublime Text概览
- Spring-Java事物回滚失效处理
- Swift 2.3迁到3.0的一些细节(不定期写)
- form标签中有button标签就会重新加载页面
- React