靜態成員可以在類的實例之間共享,可以把它看做是類的全局變量。靜態屬性和靜態字段可以訪問獨立于任何對象實例的數據,靜態方法可以執行與對象類型相關、但與類型實例無關的命令,在使用靜態成員時,可以不用實例化對象。
靜態類當我們希望類只包含靜態成員,且不能用于實例化對象時,一種簡單的方法是使用靜態類(如Console),而不是把構造函數設置為PRivate。靜態類只包含靜態成員,不需要實例構造函數,可以有一個靜態的構造函數。
接口是把特定的公共方法和屬性組合起來,以封裝特定功能的一個集合,用于需要接口定義功能的類來實現它。接口不能單獨存在,不能實例化接口。接口不能包含其成員的實現代碼,只能定義成員。實現過程必須在實現接口的類中實現。
繼承C#和java都是單繼承,被繼承的類稱為基類,派生類不能訪問基類的private成員,可以訪問public和protected成員。基類的成員可以是虛擬的,在派生類中可以重寫它。類可以是密封的(sealed),密封類不能被繼承。C#中所有對象有共同的基類object
多態性同樣的指令對于不同的對象會有不同的反應,這就是多態。多態性是因為繼承產生的,繼承導致子類和父類之間有方法和屬性之間的重疊,可以使用相同的語法處理從同一基類實例化的對象。派生類實例的對象可以直接賦值給基類對象,不需要進行類型轉換,然后基類對象可以調用派生類的成員,但不能調用除子類自己定義的方法。接口也有多態性。
internal修飾的類只能在當前項目的代碼中才可以訪問它。
abstract修飾的類不能實例化,只能繼承。sealed修飾的類只能實例化,不能繼承。一個類只能有一個基類,如果繼承了抽象類,就必須實現所繼承的所有抽象成員(除非派生類也是抽象的)。編譯器不允許派生類的可訪問性比其基類還高。abstract和sealed關鍵字不允許在接口中使用。接口沒有繼承object。
接口和抽象類 都可以被繼承,都不能被實例化,但可以申明變量。派生類只能繼承一個抽象類,但可以使用多個接口。抽象類可以有抽象成員和非抽象成員(有代碼體,也可以是虛擬的,這樣可以在派生類中重寫)。接口成員都必須在使用接口的類上實現。接口不能包含字段、構造函數、析構函數、靜態成員或常量。
新聞熱點
疑難解答