C# 引用类型数组

先自定义一个类card,

 class card
    { 
        public  int par1;
    }

     card[] ca = new card[3];
            for (int i = 0; i < 3; i++)
            {
                ca[i] = new card();
                ca[i].par1 = i;
            }


示例代码:

示例1:

card[] ca = new card[3];//ca是引用类型,给ca分配三块card类型的引用,ca指向的还是引用
            for (int i = 0; i < 3; i++)
            {
                ca[i] = new ca
rd();//通过循环给3块card类型的引用生成对象
                ca[i].par1 = i;
//给对象的成员赋值
            }
            card[] ca2 = ca;
将引用ca的值给ca2,ca2和ca指向同一块内存地址,

//方法1:给数组中引用重新分配对象

ca2[0] = new card();//给引用ca2[0]重新分配一块对象,此时ca[0]也指向了这块新对象。因为ca[0]和ca2[0]是同一块内存,改变一个会造成另一个的改变
            ca2[0].par1 = 5;//将新对象的成员值赋值为5

//方法2:改变数组中引用指向的对象的成员值

//ca2[1].par1 = 100;//这时候改变ca2,ca数组中引用指向的对象的成员值也会改变

//以上两种方法都能将改变值,并且用另一个数组引用时查看时,值也是被改变的,不过方式不同,方法1改变了两个数组中引用指向的对象,

// 方法2改变了两个数组中引用指向的对象的值,需要仔细理解。

示例2:

     card[] ca = new card[3];//给ca分配三块card类型的引用
            for (int i = 0; i < 3; i++)
            {
                ca[i] = new card();//通过循环给3块card类型的引用生成对象
                ca[i].par1 = i;//给对象的成员赋值
            }

            card[] ca2 = new card[3];//给ca2分配三块card类型的引用

           ca.CopyTo(ca2, 0);//将ca数组里的引用存放的对象地址拷贝到ca2数组的引用中,ca2和ca引用分别指向的三个引用,两者指向不同的内存,

//但是两者指向的引用中存放的值(对象的内存地址)是相同的

方法1:
           ca2[1].par1 = 100;//引用ca2[1]和ca[1]指向的是同一块内存空间,改变一个会造成另一个的改变

方法2:

    //ca2[0] = new card();//给引用ca2[0]重新分配一块对象
        // ca2[0].par1 = 100;//此时给ca2[0]指向的对象赋值,并不会造成ca的改变

//方法1改变了数组2中引用指向的对象,所以赋不同值不会改变ca中的值

//方法2改变了数组中引用指向的对象的值,再不改变引用指向的对象之前,两个数组中的引用指向的是相同的card对象,所以会造成另一个的值也会改变。

//需要仔细理解。

将ca数组里的引用存放的对象地址拷贝到ca2数组的引用中,ca2和ca数组中存放的引用不是同一个,因为上面将引用存放的地址进行了拷贝,所以这些引用最后指向的还是同一块空间,就是new出来的10个card对象。

改变一个的数值会造成另一个的改变。

把上面的ca.CopyTo(ca2, 0)换成下面的代码

for (int i = 0; i < 3; i++)
            {
                ca2[i] = new card();
                ca2[i].par1 = ca[i].par1;
            }

给ca2数组里面的每一个引用分配一块对象空间,这样,ca和ca2数组引用元素指向的空间就不是相同的了。如果改变一个数组内引用的对象的值不会造成另一个的改变。

for循环内是将数组ca1里面引用指向的对象的值依次赋给ca2数组里面引用指向的对象的值。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值