堆、棧、引用類型、值類型函數
內存分爲堆和棧(PS:還有一種是靜態存儲區域 [內存分爲這三種])spa
堆、棧:對象
堆和棧的區別:blog
引用類型、值類型接口
擴展:內存
裝箱:值類型轉換成引用類型get
拆箱:引用類型轉換爲值類型博客
實例:string
.NET中哪些是值類型?哪些是引用類型?it
案例展現:
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 (加羣備註:博客園看到的)