c#中值传递与引用传递

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; 
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值