結構是值類型,類是引用類型的理解


首先咱放個代碼,根據代碼來理解

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

垃圾菜雞只能這樣啦~~~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM