程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> .NET 基礎 一步步 一幕幕[面向對象之堆、棧、引用類型、值類型],.net面向對象

.NET 基礎 一步步 一幕幕[面向對象之堆、棧、引用類型、值類型],.net面向對象

編輯:關於.NET

.NET 基礎 一步步 一幕幕[面向對象之堆、棧、引用類型、值類型],.net面向對象


堆、棧、引用類型、值類型

內存分為堆和棧(PS:還有一種是靜態存儲區域 [內存分為這三種]),值類型的數據存儲在棧中,引用類型的數據存儲在堆中。

堆、棧:

堆和棧的區別:

  • 棧是編譯期間就分配好的內存空間,因此你的代碼中必須就棧的大小有明確的定義;局部值類型變量、值類型參數等都在棧內存中。
  • 堆是程序運行期間動態分配的內存空間,你可以根據程序的運行情況確定要分配的堆內存的大小。

 

引用類型、值類型

  • 1.將一個值類型變量賦給另一個值類型變量時,將復制包含的值。引用類型變量的賦值只復制對對象的引用,而不復制對象本身。
  • 2.值類型不可能派生出新的類型:所有的值類型均隱式派生自 System.ValueType。但與引用類型相同的是,結構也可以實現接口。
  • 3.值類型不可能包含 null 值:
  • 4.每種值類型均有一個隱式的默認構造函數來初始化該類型的默認值。
  • 5.

擴展:

  裝箱:值類型轉換成引用類型

  拆箱:引用類型轉換為值類型

實例:

.NET中哪些是值類型?哪些是引用類型?

案例展示:

 

    class Program
        {
            static void Main(string[] args)
            {
                Person yaohongbo = new Person() { Name = "姚宏波", Age = 29 };
                Person lilei = new Person() { Name = "李雷", Age = 22 };
     
                int age = yaohongbo.Age;
                yaohongbo.Age = 27;
     
                Person zhangsan = lilei;
                lilei.Name = "李磊";
     
                Console.WriteLine("yaohongbo的age:"+yaohongbo.Age);
                Console.WriteLine("age:" + age);
                Console.WriteLine("lilei的name:" + lilei.Name);
                Console.WriteLine("zhangsan的name:" + zhangsan.Name);
                Console.ReadKey();
            }
        }
        class Person
        {
            public string Name { get; set; }//引用類型
            public int Age { get; set; }//值類型
        }

 

運行結果:

 

 

代碼說明:yaohongbo.Age是int類型,為值類型,所以代碼int age=yaohongbo.Age,是將yaohongbo.Age變量存儲的值復制了一份,然後讓變量age存儲這份拷貝,此拷貝和yaohongbo.Age無任何關系,所以我們才可以看到上面的輸出結果。

再看代碼:

Person zhangsan = lilei;

lilei.Name = "李磊";

 

  

Person為自定義類,為引用類型,而引用類型穿的是引用,變量zhangsan指向的數據和變量lilei是同一個內存地址,即同一個對象,而不是像值類型那樣,拷貝了一份變量lilei指向的數據給變量zhangsan。所以才會出現無論更改zhangsan韓式lilei的屬性值,其他一個都會改變的情況。

 

本篇就到這裡了,最後打個小廣告:QQ群: .NET 一步步一幕幕  群號:590170361 (加群備注:博客園看到的)

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved