1. 程式人生 > >C#學習筆記二 (資源托管,泛型,數組和元組,運算符和類型強制轉換)

C#學習筆記二 (資源托管,泛型,數組和元組,運算符和類型強制轉換)

方法 約束 資源 實例 對象 where 學習筆記 如果 數據庫連接

1.托管資源是指GC管理的內存空間,非托管資源是指文件句柄,網絡連接,數據庫連接等。

2.方法中臨時申請的變量,被存放在棧中。棧存儲非對象成員的值數據。例如在方法中有B b=new B(); b的值在棧中,new B()的數據在堆中,相當於指針與目標數據的關系。

3.GC工作的主要方式是將不被引用的內存進行釋放,然後進行數據移動,從而使得被引用的內存空間總是連接成片的。例如某個對象的位置被移動後,new B()的結果的實例的數據被移動,那麽b的值也會變動,從而始終指向new B()結果的實例的位置。

4.強應用就是如b=new B();弱引用的意義是運行被引用的對象被GC釋放,比如如果b對new B()是弱引用的,某個時間點new B的結果被釋放,那麽b的結果就會變成null,具體如何使用現在用不到,不寫了。

5.釋放非托管資源的方式,可以是析構函數,finallize終結器和實現System.IDisposable接口。但無法確定析構函數何時執行,或者由於多個終結器同時運行會造成性能問題,因此最好使用IDisposable接口。

6.關於C#的指針代碼,以後再學。

7.平臺調用,即如果用C#調用dll中的api等,用到的時候再學。

從值類型轉換為引用類型成為裝箱。如果方法需要把一個對象作為參數,同時傳遞一個值類型,裝箱就會自動進行。裝箱的值類型可以使用拆箱操作轉換為值類型,在拆箱時,需要使用類型強制轉換運算符。

在JIT編輯器把泛型類編譯為本地代碼時,會給每個類型創建一個新類。引用類型共享同一個本地類的所有共同的實現代碼。這是因為引用類型在實例化的泛型類中只要4個字節的內存地址,就可以引用一個引用類型。值類型包含在實例化的泛型類的內存中,同時因為每個值類型對內存的要求都不相同,所以要為每個值類型實例化一個新類。

Default用於給泛型指定默認值,where用於對泛型T做出約束,如果某個方法對泛型T有要求,也可以用where的做約束;對於泛型的繼承,還可以直接指定類型,如 public class B:A<int>{...},這裏直接讓泛型的類型為int。

協變和抗變,主要和類型轉換限制有關,協變<out T>,抗變<in T>。具體的懶得寫。

C#學習筆記二 (資源托管,泛型,數組和元組,運算符和類型強制轉換)