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

Posted battly

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了结构是值类型,类是引用类型的理解相关的知识,希望对你有一定的参考价值。

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

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~~~

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

 

以上是关于结构是值类型,类是引用类型的理解的主要内容,如果未能解决你的问题,请参考以下文章

Swift中数组和字典都是值类型

类和结构的区别

c语言中啥是类(class),啥是结构。两者有啥区别?详细点。书上不太清楚。。谢谢

C# 结构体

C# 结构体

类和结构体的区别