c#中值传递与引用传递
在C#中,方法、构造函数可以拥有参数,当调用方法或者构造函数时,需要提供参数,而参数的传递方式有两种(以方法为例):
值传递
值类型对象传递给方法时,传递的是值类型对象的副本而不是值类型对象本身。常用的一个例子:
public struct MyStruct
{
public int Value {
get; set; }
}
static void Invoke(MyStruct myStruct, int i)
{
//MyStruct和int都是值类型
myStruct.Value = 1;
i = 2;
Console.WriteLine($"Modify myStruct.Value = {
myStruct.Value}");
Console.WriteLine($"Modify i = {
i}");
}
static void Main(string[] args)
{
var myStruct = new MyStruct();//Value=0
var i = 0;
Invoke(myStruct, i);
Console.WriteLine($"Main myStruct.Value = {
myStruct.Value}");
Console.WriteLine($"Main i = {
i}");
//输出:
//Modify myStruct.Value = 1
//Modify i = 2
//Main myStruct.Value = 0
//Main i = 0
}
对于引用类型对象,很多人认为它是引用传递,其实不对,它也是按值传递的,但是不像值类型传递的是一个副本,引用类型传递的是一个地址(可以认为是一个整型数据),在方法中使用这个地址去修改对象的成员,自然就会影响到原来的对象,这也是很多人认为它是引用传递的原因,一个简单的例子:
public class MyClass
{
public int Value {
get; set;

最低0.47元/天 解锁文章
772

被折叠的 条评论
为什么被折叠?



