《Visual C# 2010 Step By Step》前14章學習總結

一、爲方法指定一個可選參數:
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操做。因此在非必要時儘可能避免使用析構器。
相關文章
相關標籤/搜索