C# 方法参数传递之值传递和引用传递

本文详细介绍了C#中值类型与引用类型的传递机制,包括值传递与引用传递的区别及应用场景。通过具体实例展示了不同类型参数传递的效果,帮助读者更好地理解和运用C#中的参数传递。

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

1、大部分情况下,使用C#预定义的类型时,都是按照值传递使用的,比较复杂的情况是按照引用传递各种类型(值类型和引用类型),其实实质上的不同时对变量的操作方式上的不同
2、在c#内置基本类型当中,除了object和string外,都是值类型。同时,自己定义的类,也都是引用类型。因为自定义类全部继承自System.Object

3、 C# 中,既可以通过值也可以通过引用传递参数。通过引用传递参数允许函数成员(方法、属性、索引器、运算符和构造函数)更改参数的值,并保持该更改。若要通过引用传递参数,请使用refout关键字。out与ref类似,唯一的不同是ref修饰变量时,变量需要初始化,而out修饰变量时则不需要。

即:值传递操作变量副本,引用传递操作变量本身

(1)值传递值类型:

    class ValClass
    {
        static void AddValue(int x)
        {
            x++;
        }
        static void Main()
        {
            int i = 22;
            AddValue(i);
            Console.WriteLine(i);
            //输出结果:22
        }
    }
(2)引用传递值类型:
    class ReferenceClass
    {
        static void AddValue(ref int x)
        {
            x++;
        }
        static void Main()
        {
            int i = 22;
            AddValue(ref i);
            Console.WriteLine(i);
            //输出结果:23
        }
    }
(3)值传递引用类型:
    class ValClass
    {
        string str = "Definition Str In ValClass";
        static void ChangeVal(string str)
        {
            str = str + "was changed!";
        }
        static void Main()
        {
            string str = "Definition Str In Main";
            ChangeVal(str);//值传递
            Console.WriteLine(str);
            //输出结果:Definition Str In Main
        }
    }
(4)引用传递引用类型:
    class ValClass
    {
        string str = "ValClass.str";
        static void ChangeVal(ref string str)
        {
            str = "Str Was Changed In ValClass";
        }
        static void ChangeObj(ValClass vc)
        {
            vc.str = "Definition Str Again In ValClass";
        }
        static void Main()
        {
            string str = "Definition Str In Main";
            ChangeVal(ref str);//引用传递
            Console.WriteLine(str);
            //输出:Str Was Changed In ValClass
            Console.WriteLine("-------------------------");
            ValClass vc = new ValClass();
            Console.WriteLine(vc.str);
            //输出:ValClass.str
            ChangeObj(vc);//引用传递
            Console.WriteLine(vc.str);
            //输出:Definition Str Again In ValClass
        }
    }

 

转载于:https://www.cnblogs.com/dylanchan/archive/2011/08/15/2139702.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值