码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-08-01 19:24:07      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:pac   bsp   adk   内存   img   ubi   har   声明   技术分享   

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

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

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

 

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

标签:pac   bsp   adk   内存   img   ubi   har   声明   技术分享   

原文地址:http://www.cnblogs.com/UnityLittleBird/p/7269791.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!