值类型+引用类型+ref

本文通过四个不同的运算示例,对比了结构体和类在值传递与引用传递两种情况下的行为差异。具体分析了在不同情况下变量的值如何变化,并展示了在C#中这两种数据类型的不同特性。

1、准备
    struct Str
    {
        public int i;
    }
    class Cla
    {
        public int i;
    }
2、赋值
    Str str = new Str();
    str.i = 10;
    Cla cla = new Cla();
    cla.i = 10;
分类:
运算A
   static void F(Str str)
   {
     str.i = 100;
   }
   static void F(Cla cla)
   {
     cla.i = 100;
   }
结果A
            F(str);
            Console.WriteLine(str.i);//结果10
            F(cla);
            Console.WriteLine( cla.i);//结果100
运算B
   static void F(ref Str str)
   {
     str.i = 100;
   }
   static void F(ref Cla cla)
   {
     cla.i = 100;
   }
结果B
            F(ref str);
            Console.WriteLine(str.i);//结果100
            F(ref cla);
            Console.WriteLine( cla.i);//结果100

运算C
   static void F(Str str)
   {
     str=new Str();
     str.i = 100;
   }
   static void F(Cla cla)
   {
     cla=new Cla();
     cla.i = 100;
   }
结果C
            F(str);
            Console.WriteLine(str.i);//结果10
            F(cla);
            Console.WriteLine( cla.i);//结果10

运算D
   static void F(ref Str str)
   {
     str=new Str();
     str.i = 100;
   }
   static void F(ref Cla cla)
   {
     cla=new Cla();
     cla.i = 100;
   }
结果D
            F(ref str);
            Console.WriteLine(str.i);//结果100
            F(ref cla);
            Console.WriteLine( cla.i);//结果100
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值