讀《.NET 大局觀》(2)

來源:互聯網
上載者:User

前一段時間寫了一篇,最近這本書都沒怎麼看它了,呵,書一買回來時會翻幾頁,而看完的書卻真的是少之又少,再加上看書的時間並不多,天天又是面對這些專業書,也夠無聊的。不過這些書對增加些基本知識確實是大有用處的,對基礎的紮實理解才能達到更高的境界,像人家老外寫的書,不同凡響,總是每一處都寫得非常的細緻,而且對整個架構的理解也非常透徹,一眼望雲,國人能做到的有幾人?還有就是最近裝上了IE7,這163部落格在寫文章的時候選選擇標籤的時候會有點問題,可能是網易開發人員沒考慮到IE7的相容性CSS,搞得很不爽。

廢話這麼多,進入讀書正題吧,當看到實值型別和參考型別時,就有一些想法了,“實值型別和參考型別之間的一個根本差異是:前者的執行個體被分配於堆棧,後者則只不過是一個位於堆棧的引用,指向(代表)一個被分配於堆的實值。”

要理解這句話確實是不容易,如果單獨紿我這樣一句話我會莫名,其實到現在我對於堆和堆棧的瞭解也甚少,或是說根本不瞭解,一般說來,我理解的是實值型別的聲明都是用系統的實值型別聲明的,有Byte,Char,Int16,Int32,Int64,UInt16,UInt32,UInt64,Single,Double,Decimal,Enum,Boolean,而參考型別聲明一般是類,介面,數組,委託,不過好像枚舉是實值型別的,在將實值型別轉換為參考型別時稱為裝箱(Boxing)。

換句話說,實值型別是放在堆棧中的,供程式調用的,而參考型別,實際值是放在堆中,而引用地址放在堆棧中,堆棧變數所使用的記憶體會在其建立者返回時自動釋放,而分配於堆中的變數,並不會自動釋放記憶體,它們的記憶體將通過一個記憶體回收機制(garbage collection)的處理過程而被釋放。

所以,我們通常在方法中傳參數時,如果參數是實值型別,一般不會改變原來變數的值,而如果是參考型別,會改變值。比如:

public void Sum(int x,int y)
{
  x = 1;
}
調用

int x=0,y=0;
Sum(x,y);
這個時候X的值還是0

如果傳的是參考型別

public class a
{
   public int a=1;
}

public void gg(a x)
{x.a = 100;}

調用
a x = new a();
gg(x);

這個時候,對象X中的變數a已經是100了。

呵,好了,其實注意這些,有的時候對你困惑了好久認為不可理解的問題會一下子就理解了。呵!其實實值型別和參考型別不僅僅是在C#會遇到的問題,還記得嗎,C也是這樣的,不過他用的應該是指標吧!哎,什麼時候有時間再回味一下C!

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.