實值型別和參考型別

來源:互聯網
上載者:User

標籤:

?C#有三種類型,其中指標類型微軟不建議使用,所以不介紹了。

實值型別和應用類型,其實很好區分和解釋。我就用一段代碼一個圖說明清楚

 

* 自訂類型:結構體

 

 代碼如下:

    /// <summary>    /// 結構體    /// </summary>    public struct People    {        public  string Name { get; set; }             public  int Age { get; set; }        public void Write()        {            Console.WriteLine($"實值型別 Name={Name} ,Age={Age}");        }    }    /// <summary>    /// 引用類    /// </summary>    public class PeopleClass    {        public string Name { get; set; }               public int Age { get; set; }        public void Write()        {            Console.WriteLine($"參考型別 Name={Name} ,Age={Age}");        }    }
       static void Main(string[] args)        {            Console.WriteLine("實值型別輸出開始=================");            People p = new People();            p.Name = "tom";            p.Age = 18;            p.Write();            People pp = p;            pp.Write();            Console.WriteLine("pp改變一下值=================");            pp.Name = "jack";            pp.Age = 20;            pp.Write();            p.Write();            Console.WriteLine("實值型別輸出結束=================");            Console.WriteLine("參考型別輸出開始=================");            PeopleClass pc=new PeopleClass();            pc.Name = "tom";            pc.Age = 18;            pc.Write();            PeopleClass pcref = pc;            pcref.Write();            Console.WriteLine("pcref改變一下值=================");            pcref.Name = "jack";            pcref.Age = 20;            pcref.Write();            pc.Write();            Console.WriteLine("參考型別輸出結束=================");            Console.ReadLine();        }

 

輸出結果:

實值型別輸出開始=================
實值型別 Name=tom ,Age=18
實值型別 Name=tom ,Age=18
pp改變一下值=================
實值型別 Name=jack ,Age=20
實值型別 Name=tom ,Age=18
實值型別輸出結束=================
參考型別輸出開始=================
參考型別 Name=tom ,Age=18
參考型別 Name=tom ,Age=18
pcref改變一下值=================
參考型別 Name=jack ,Age=20
參考型別 Name=jack ,Age=20
參考型別輸出結束=================

 

最終結論:

可以看出由於類是需要開闢堆區空間,變數是指向堆區的引用。所以參考型別賦值不會改變堆區的引用。而實值型別是直接在棧區開闢空間的不存在引用。

關於堆區和棧區,如果沒有認知的話,我推薦一本書,可能大學都讀過《深入理解電腦系統》,我最近在複讀,略有見解。

在欄位範圍的影響下,棧區會被新值覆蓋。而堆區會自動被GC處理。

實值型別:高效,缺點作為資料的載體。沒有多態。

參考型別:需要被GC,實現豐富。

實值型別和參考型別

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.