结构是值类型,类是引用类型的理解

首先咱放个代码,根据代码来理解

using System;

namespace CSharp
{
    public class MyClass
    {
        public int val;
    }
    struct Struct
    {
        public int val;
    }
    class Program
    {
        public static void Main(string[] args)
        {
            MyClass MyClass1=new MyClass();
            MyClass MyClass2=MyClass1;
            MyClass1.val=10;
            MyClass2.val=20;
            Struct Struct1=new Struct();
            Struct Struct2=Struct1;
            Struct1.val=30;
            Struct2.val=40;
            Console.WriteLine("{0}",MyClass1.val);
            Console.WriteLine("{0}",MyClass2.val);
            Console.WriteLine("{0}",Struct1.val);
            Console.WriteLine("{0}",Struct2.val);
            Console.ReadKey(true);
        }
    }
}

然后咱们在来个运行结果:

嘿嘿,这样不就看出问题来了,(->_->)~~~~

来来,咱们来解释一下:

这个程序包含了一个结构类型Struct和一个类MyClass,两者都有一个int类型字段val。

在运行过程中两者都是执行了这样的操作:

1.声明类型的变量;

2.在这个类型的变量中创建该类型的新实例;

3.声明类型的第二个变量;

4.将第一个变量赋给第二个变量;

5.在第一个变量的实例中赋值val;

6.在第二个变量的实例中赋值val;

7.显示两个变量实例的val;

尽管对两个类型的变量执行了相同的操作,但结果显示是不同的,object类型的两个变量值是一样的,而结构类型的值却是不一样,为什么造成这样的结果呢?

对象是引用类型,在把对象赋给变量时,实际上是把带有一个指针的变量赋给了该指针所指向的对象,实际代码中,指针是对内存的一个地址,而地址是内存中该对象所在的位置,在用 MyClass MyClass2=MyClass1; 时,实际上是复制了这个地址,这样两个变量就包含了同一个对象的指针。

结构是值类型,其变量不是包含结构的指针,而是结构的本身,在用Struct Struct2=Struct1;时,实际上是把第一个结构的信息复制到第二个结构变量上。

好晕  晕  晕   晕  略略略~~~~

biubiubiu~~~

垃圾菜鸡只能这样啦~~~

 

转载于:https://www.cnblogs.com/UnityLittleBird/p/7269791.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值