天天看點

C# 基礎學習1(struct,base,關聯數組,枚舉)

1,“關聯數組”是一種具有特殊索引方式的數組。不僅可以通過整數來索引它,還可以使用字元串或者其他類型的值(除了NULL)來索引它。

2,枚舉是由一組特定常量構成的一組資料結構。主要作用是:約定(限制),直覺(表達)。

3,struct

struct 不能被繼承,class可以被繼承

struct 預設的通路權限是public,而class預設的通路權限是private

struct隻能聲明帶參數的構造函數,如果聲明了帶參數的構造函數,那成員變量必須在帶參數的構造函數中初始化,同樣也不能有析構的處理部分。這是因為Struct的構造函數是由編譯器自動生成的。

struct的new和class的new是不同的。struct的new就是執行一下構造函數建立一個新執行個體再對所有的字段進行Copy。而class則是在堆上配置設定一塊記憶體然後再執行構造函數,struct的記憶體并不是在new的時候配置設定的,而是在定義的時候配置設定。類的執行個體隻能通過new SomeClass()來建立,struct類型的執行個體既可以通過new SomeStruct()來建立,也可以通過SomeStruct myStruct;來建立

struct給成員賦初值是不太容易的,又不能直接指派,通過帶參數構造函數指派,或直接使用函數。

推薦使用struct的情況:

小于16個位元組。

偏向于值,是簡單資料,而不是偏向于"面向對象"。

希望值不可變。

在多數情況下,推薦使用class類,因為無論是類的指派、作為參數類型傳遞,還是傳回類的執行個體,實際拷貝的是托管堆上引用位址,也就大概4個位元組,這非常有助于性能的提升。

而作為struct類型,無論是指派,作為參數類型傳遞,還是傳回struct類型執行個體,是完全拷貝,會占用棧上的空間。

在結構使用時,結構可以實作接口。這時就有一個問題“結構體實作接口後是值類型還是引用類型?”。

當我們聲明對象(s1、s2)是結構體類型時,對象是值類型,對象在棧中建立

當我們聲明對象(ic1、ic2)是接口類型時,對象是引用類型,對象在堆中建立

再比如:public struct Int32 : IFormattable, IConvertible, IComparable, IComparable<Int32>, IEquatable<Int32>

為什麼結構體可以使用接口呢?

接口是一種約定,規範,比如Int32這種類型滿足一些規範,至于為什麼,我不知道。

4,base關鍵字,用于從派生類中通路基類的成員:

兩個功能:

第一:調用基類上已被其他方法重寫的方法。

第二:指定建立派生類執行個體時應調用的基類構造函數。

注意:不能從靜态方法中使用base關鍵字,base關鍵字隻能在執行個體構造函數、執行個體方法或執行個體通路器中使用