一、爲方法指定一個可選參數:
void method(int arg1, double arg2 = 0.0, string arg3 = "")
{
// method body
}
二、利用命名參數向方法提供一個實參:
method(arg1 : 100, arg3 : "hello");
三、以下代碼,若是FormatException catch塊中的代碼生成一個OverflowException異常,那麼該異常會傳給調用當前代碼的方法,即調用棧的上一層,而不是傳給相鄰的OverflowException catch塊。
try
{
// ...
}
catch (FormatException ex)
{
// ...
}
catch (OverflowException ex)
{
// ...
}
四、可在項目屬性中設置啓用或禁用溢出檢查。
五、只有直接放在checked塊中的整數運算纔回獲得檢查。例如塊中出現一個方法調用,則不會對調用的方法中的整數運算進行檢查。
六、封裝的目的:
① 將方法和數據合併到一個類中,即爲了支持分類;
② 控制對方法和數據的訪問,即爲了控制類的使用。
七、類中的字段會自動初始化(可是建議顯式地初始化字段),而方法中聲明的變量不會。
八、const字段也是靜態字段,但在聲明時不使用static關鍵字。
九、靜態類只能包含靜態成員,靜態類純粹做爲工具方法和字段的一個容器來使用。
十、在靜態方法中,不能訪問類中定義的任何實例字段。
十一、建立一個匿名類:
var myAnonymousObject = new { Name = "Silent", Age = 20 };
十二、C#中的string類型是引用類型。
1三、可空類型的Value屬性是隻讀的。
1四、ref參數和out參數都是實參的一個別名,區別在於ref實參在傳遞前須要初始化,而out參數必須在方法內部對其進行賦值。
1五、裝箱是將一個數據項從棧自動複製到堆的行爲。
int i = 42;
object o = i;
// 運行時會在堆中分配一片內存,
// 而後將i中值的一個副本複製到這片內存,
// 最後讓o引用這個副本。
1六、is操做符用於驗證對象的類型是否爲指望類型,as操做符會嘗試將對象轉換成指定的類型。
1七、C#中枚舉和結構屬於值類型。
1八、能夠選擇讓枚舉類型基於一種不用的基本數據類型:
enum Season : byte { Spring, Summer, Fall, Winter }
1九、不能爲結構聲明本身的默認構造器,由於編譯器始終會爲結構自動生成默認構造函數。
20、在結構的非默認構造函數中,必須本身負責初始化全部字段。
2一、結構不容許在聲明一個實例字段的同時初始化它。
2二、使用枚舉文字常量時必須以枚舉類型做爲前綴。
currentSeason = Season.Spring;
2三、數組是引用類型,無論其元素是什麼類型。
2四、foreach語句的循環變量是數組的每一個元素的只讀副本。
2五、複製數組元素:
int[] pins = { 1, 2, 3, 4 };
int[] copy1 = new int[pins.Length];
pins.CopyTo(copy1, 0);
int[] copy2 = new int[pins.Length];
Array.Copy(pins, copy, copy.Length);
int[] copy3 = (int[])pins.Clone();
2六、使用參數數組可讓方法接受一個類型的任意數量的參數:
void method(params int[] args)
{
// method body
}
2七、爲一個類型定義擴展方法:
static class Util
{
public static int Negate(this int i)
{
return -i;
}
}
2八、接口不包含任何代碼或數據,它至關於一份契約,只描述了對象的方法,而由實現該接口的類來完成其方法的具體實現細節。
2九、不容許爲接口中的任何方法指定訪問修飾符。接口中的全部方法都隱式地爲public方法。
30、用於實現一個接口的全部方法都必須具備public可訪問性。可是,假如使用顯式接口實現,則不該該爲方法添加訪問修飾符。
3一、用sealed關鍵字修飾的類不能被繼承,sealed方法不能被派生類重寫。結構爲隱式密封。
3二、不要對對象的銷燬順序或者垃圾回收的時間作出任何假設。
3三、垃圾回收器會將須要運行析構器的不可達對象放入一個freachable隊列,最後在一個單獨的線程中對該隊列的對象執行finalize操做。因此在非必要時儘可能避免使用析構器。