默認都是按值傳遞(不管引用仍是值類型),也就意味着傳遞參數的一個副本給方法.以後在方法體內對參數的更改,對原始參數沒有影響.數據庫
使用ref/out能夠按引用傳遞,直接影響原始參數變量.二者的區別是ref參數必須在傳遞以前進行初始化.在異步方法和迭代器方法中,不能使用它.設計模式
2,CTS,CLS數組
CTS是一個集合,符合它的規範的類型才能在CLR上運行.CLS是它的子集,由於C#中有的類型,在VB中可能沒有(ulong).安全
默認不會進行CLS的檢查,[assembly:System.CLSCompliant(true)]能夠進行檢查.網絡
不符合CLS的代碼,在不一樣語言間會出現複用的問題.app
3,CLR框架
編譯階段,生成的是CIL組成的中間語言,而後在運行時由個平臺的JIT來編譯成機器指令進行運行,因此可以跨平臺.異步
做用:1)管理內存(處理對象佈局,管理對象引用,自動GC),2)線程執行,3)代碼執行(可與非託管代碼互操做,引用COM DLL),4)代碼安全驗證(取決於組件的來源)(以CTS驗證Type),5)編譯(CLR從不解釋託管代碼,由JIT編譯代碼),其可由高性能Server App承載並用託管代碼編寫邏輯.分佈式
4,GCide
0代是新建立的對象,1代是經歷過1次GC後留存的,2代是經歷過1次以上GC留存的.回收時,先從0代開始.
5,is/as
6,接口/抽象類
7,Attribute特性
8,Struct
9,CTS
10,參數
11,委託
Other
調用Windows API函數.
引用System.Runtime.InterpServices;[DllImport(「XX」,Entry Point=」XXX」,CharSet=」XXXX」)]:XX爲Dll所在的位置(User32.dll);XXX爲所要引用的函數名,XXXX=UniCode/ANSI.
1 public IEnumerator<int> GetEnumerator() 2 { 3 int[] list = new int[]{1,2,3}; 4 foreach (int i in list) 5 yield return i; 6 }