仓库和物品? 堆和栈!值类型和引用类型~~~~

 

   struct Date

    {

        byte year;

        byte month;

        byte day;

 

        public Date(byte yy, byte mm, byte dd)

        {

            this.year=yy;

            this.month = mm;

            this.day = dd;

        }

            

        public Date(byte yy ,byte mm)

            :this(yy,mm,1)

        {

        }

        public Date(byte yy)

        {

            this.year=yy;

            this.month=1;

            this.day =1;

        }

    }

 

    class Brithday

    {

        byte year;

        byte month;

        byte day;

 

       public Brithday (byte yy,byte mm,bytedd)

       {

           this.year=yy;

           this.month=mm;

           this.day=dd;

        }

       public Brithday(byte yy, byte mm)

       :this(yy,mm,1)

       {

       }

      

        public Brithday(byte yy)

        {

            this.year=yy;

        }

    }

 

  对于C#中的值类型和引用类型,查阅了相关资料后,来谈一下自己的理解:实际上,我们可以将值类型和引用类型同堆栈的关系比作仓库与仓库中堆放的物品,我们对物品的箱子进行编号,再将编号记录在一个本子上面,那么这个本子就是栈,仓库就是堆.对于本子上的数据进行操作,并不影响物品的情况,这种类型就是值类型,类似于VB中的按值传递;而如果对仓库里面的物品进行操作的话,那么物品就会发生相应的变化,这种类型的就是引用类型,类似于VB中的按址传递;

如:对例1中定义的结构作如下操作:

//   使用结构

        static void UseStruct()

        {

            Date labourDay = new Date(5, 1);

            Date yaoMingBirth = labourDay;

            labourDay.ReadDate();

            yaoMingBirth.ReadDate();

            yaoMingBirth.Change(1980, 11, 8);

            labourDay.ReadDate();

            yaoMingBirth.ReadDate();

        }

显示结果:

5-1

5-1

5-1

1980-11-8

修改其中一个变量的值,不会影响和它同一个拷贝的另外一个变量。

 

如:对例1中定义的类进行如下操作:

//   使用类

        static void UseClass()

        {

            Birthday myBirth = newBirthday(1987, 6, 12);

            Birthday liliBirth = myBirth;

            myBirth.ReadDate();

            liliBirth.ReadDate();

            myBirth.Change(1990, 3, 16);

            myBirth.ReadDate();

            liliBirth.ReadDate();

 

        }

显示结果:

1987-6-12

1987-6-12

1990-3-16

1990-3-16

修改一个引用的值,另一个相同的引用的值就会发生改变。

 

也就是说:结构是值类型数据.存储在栈(stack)中。结构进行数据复制的时候,是将原来数据进行备份。创建结构时,结构赋值到的变量保存该结构的实际数据。将结构赋给新变量时,将复制该结构.因此,新变量和原始变量包含同一数据的两个不同的副本。 对一个副本的更改不影响另一个副本。而引用类型恰好相反.

联系VB我们可以想到,对于C#中的值类型和引用类型,我们可以将它们看成VB中的按值传递和按参数传递.C#中的引用类型相似于VB中的按地址传递,而值类型则类似于C#中的按值传递.

  

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值