C# 方法内的参数 引用类型与值类型的一些理解

本文通过实例对比了C#中值类型和引用类型的差异,重点解释了如何使用ref和out来改变值类型的行为,并展示了类和结构体在方法传递中的不同表现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  C#内的方法内的参数有值类型和引用类型的区别

  在参数前用ref 或 out修饰后,参数就变为引用类型传递了。 

   原先赋值过的变量会在调用这个方法后变化。 

 我的理解是值传递时候,调用方法的参数时候,复制了一份,然后使用。 而引用传递时候,是直接把变量的地址传递给了方法,直接改变那些变量。


   参数如果是类、结构体的时候。

   用一段测试程序说明下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace yinyongChuangdi
{
    class Program
    {
        static void Main(string[] args)
        {
            People lisa = new People() { id = 5 };
            Console.WriteLine("新建一个People为Lisa");
            Console.WriteLine("Lisa的id为:" + lisa.id);
            change(lisa);
            Console.WriteLine("change后");
            Console.WriteLine("Lisa的id为:"+lisa.id);

            change2(lisa);
            Console.WriteLine("change2后");
            Console.WriteLine("Lisa的id为:" + lisa.id);

            Console.WriteLine();

            Pirate jack = new Pirate() { id = 1 };                    
            Console.WriteLine("新建一个Pirate为jack");
            Console.WriteLine("jack的id为:" + jack.id);
            cc(jack);
            Console.WriteLine("cc后");
            Console.WriteLine("jack的id为:" + jack.id);

            cc2(jack);
            Console.WriteLine("cc2后");
            Console.WriteLine("jack的id为:" + jack.id);

            Console.ReadLine();
        }

        static void change(People ll)
        {            
            ll.id = 3;
        }

        static void change2(People ll2)
        {
            ll2 = new People();
            ll2.id = 2;
        }

        static void cc(Pirate aa)
        {
            aa.id = 100;
        }

        static void cc2(Pirate aa2)
        {
            aa2 = new Pirate();
            aa2.id = 200;
        }


    }

    class People
    {
        public int id{get;set;}
    }

    struct Pirate
    {
        public int id;       
    }
}


输出结果为:



lisa是一个类,引用类型,

change方法参数是类名,方法体内没有new这个类,它改变了lisa的id。

change2方法内new了下,重新new了一个类,改变id的新建的id。不影响lisa原本id。


jack是个结构体。

从上面看,不管怎么搞,原来是多少,就是多少。

当然, 如果你的结构体内有引用变量的话,这就看你方法体内有没有new了,没new会变,new了就不变。我上面例子里只是个int值变量哦。 


你要加了ref的话,那都会变啦。

ok,先这些了。








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值