C#大多數基元類型包括int、float、double、和char等,注意這里不包括string,這些都是值類型。將變量聲明為值類型,編譯器會生成代碼來分配足以容納這個值得內存塊。編譯器分配內存的時候並不是分配一個能夠容納整個類的內存塊,它唯一做的事情就是分配一個這個類的地址。
c#的string實際是類類型。由於字符大小不固定,所以分配的是一個動態的內存,而不是編譯的時候分配一個靜態。
引用類型的復制與私有數據:
要將一個引用類型的某個對象,復制給另一個引用類型的某個對象,不能直接復制引用,必須讓這個引用類型應用需要復制類的新實例,再將數據字段從上一個引用類型中復制出來。但是如果需要復制的這個字段在類中的屬性是私有的,就不能復制這個數據,私有字段作為屬性公開,再通過屬性讀取這個數據並復制出來。另外,類可以提供clone方法來返回自己的新實例,並填充相同的數據,clone方法能夠訪問對象的私有數據,並直接將數據復制到同一個類中的另一個實例中去。
這個位置我們需要知道私有數據到底 私有 在哪個位置,private關鍵字創建了不能從類外訪問的字段或方法。 但是,並不是說它只能單過對象訪問,創建同一個類的兩個對象,他們分別能夠范圍對象的私有數據。clone就是依賴這個原理實現的,clone.a = this.a;這樣之所以能夠工作,正式因為可以從a類的當前實例中訪問clone對象的私有a字段,所以 私有 實際指的是在 類的級別上私有 並不是在對象級別上私有 私有和靜態也是兩碼事,字段聲明為私有,類的每個實例都有一份自己的數據,聲明為靜態,每個實例都共享同一份數據。