C#之值类型与引用类型--out参数--ref参数-"=="、Equals和ReferenceEquals之间的区别
一、值类型和引用类型
1.值类型
(1)值类型的大小是固定的
(2)值类型都派生自ValueType
(3)值类型不能继承,只能实现接口
2.值类型:int、char、double、float、long、short、byte、bool、enum、struct、decimal
3.栈中内存使用
4.引用类型
(1)引用类型派生自object类
(2)引用类型可以继承(类之间可以继承)
5.引用类型:string、数组、类、接口、委托、自定义类
6.值类型和引用类型总结
(1)值类型赋值的时候是将栈中的数据拷贝了一个副本
(2)引用类型赋值的时候是将栈中的地址拷贝了一个副本
二、out参数和ref参数
1.out参数
(1)out参数在使用之前必须在方法里面为out参数赋值
(2)out参数无法获取传递进来的变量中的值,只能为传递进来的变量赋值
(3)out参数在方法执行完毕之前,必须赋值
static void Main(string[] args) { string m; string get_result=Test(out m); Console.WriteLine(get_result); Console.ReadKey(); } static string Test(out string msg) { msg = "你好呀"; return msg; }
在一般的传递参数中,是给方法传进去一个值;而out参数和普通参数相反,传参之前不能进行赋值。
2.ref参数
3.总结:
(1)ref表示是”按引用传递“,传递的是栈本身的地址。
(2)值传递传递的是栈中的内容,是将栈中的内容拷贝了一个副本。
三、==、Equals和ReferenceEquals的区别
TODO: