1、繼承的型別
2、c#是否支援多重繼承?開發c#的重要目標是簡化健壯**的編寫工作,因此,不支援多重繼承,3、繼承的語法結構c#允許型別派生自多個介面——多重介面繼承
宣告派生自另乙個類4、什麼是虛方法?
class myclass: mybaseclass
類派生於介面,則用逗號分隔介面
class myclass: iinte***ce1, iinte***ce2
將基類函式宣告為virtual,就可以在任何派生類中重寫該函式,5、隱藏方法需要使用override關鍵字;也可以把屬性宣告為virtual。
class mybaseclass
}
簽名相同的方法在基類和派生類中都進行了宣告,但沒有宣告為virtual或者override,派生類就會隱藏基類的方法。6、呼叫函式的基類版本在開發中,基類和派生類有相同名字的方法,但卻沒有任何關係,為了能正常編譯,就要隱藏乙個方法,會使用new關鍵字宣告。
class
myclass: mybaseclass
}
語法:base.()
呼叫基類中的任何方法。
7、抽象類和抽象函式
把類和函式宣告為abstract。8、密封類和密封方法抽象類不能例項化,抽象函式不能直接實現。
乙個類包含了抽象函式,則該類必須宣告為抽象的。
把類和方法宣告為sealed。9、建構函式的執行順序對於類,表示不能繼承該類;對於方法,表示不能重寫該方法。
建構函式先呼叫system.object的建構函式,10、帶引數的建構函式再按照繼承的層次結構從上往下進行,直到最終要例項化的類為止,
在不考慮靜態建構函式的情況下(因為靜態構造僅執行一次,且定義靜態建構函式的時候並不多)11、介面的定義子類在呼叫父類的建構函式時,預設情況是呼叫父類的無參建構函式,
如果父類只有帶參建構函式,而沒有無參建構函式,那麼編譯時會報錯;不過我們可以通過base關鍵字來指定呼叫帶參建構函式。
//父類
public
class superclass
}//子類
public
class childclass : superclass
}
在語法上與宣告抽象類完全相同,但不允許提供介面中任何成員的實現方式。12、派生的介面一般情況下,介面只能包含方法、屬性、索引器和事件的宣告。
介面可以彼此繼承,其方式與類的繼承方式相同。13、修飾符的分類可以在派生介面中定義新的方法,
但是,實現派生自該派生介面的類必須實現派生介面和基類介面的所有方法。
1、可見性修飾符修飾符應用
說明public
所有型別或成員
任何**均可以訪問
protected
型別和內嵌型別的所有成員
只有派生的型別可以訪問
internal
所有型別或成員
只能在包含它的程式集中訪問
private
型別和內嵌型別的所有成員
只能在它所屬的型別中訪問
protected internal
型別和內嵌型別的所有成員
只能在包含它的程式集和派生型別的任何**中訪問
2、其他修飾符
修飾符應用
說明new
函式成員
成員用相同的簽名隱藏繼承的成員
static
所有成員
成員不作用於類的具體例項
virtual
僅函式成員
成員可以由派生類重寫
abstract
僅函式成員
虛擬成員定義了成員的簽名,但沒有提供實現**
override
僅函式成員
成員重寫了繼承的虛擬或抽象成員
sealed
類、方法和屬性
對於類,不能繼承自密封類,對於屬性和方法,任何派生類中的任何成員都不能重寫該成員
extern
僅靜態方法
成員在外部用另一種語言實現
第四章 繼承
一 為什麼要繼承 在物件導向中我們將具有很多重複內容的類中的內容提取出來,寫成乙個單獨的類 其他類只需要繼承就能取得這些功能,同時可以在自己類中寫入獨特的自定義方法 二 繼承語法 inte ce circle nsobject 繼承是在介面中定義的 冒號後的類名是要整合的類,nsobject 是co...
第四章 物件
三個特性 身份 型別 值 每個物件都有唯一的身份來標識自己,使用內建函式id 得到。例子 usr bin env python coding utf 8 a 32 print a b a print id a id b 結果 d python27 python.exe e workp python ...
第四章 其他
sizeof和strlen 區別sizeof以位元組為單位給出資料的大小,strlen 函式以字元為單位給出字串的長度。使用strlen 函式要加 include標頭檔案。sizeof計算字元時會將標誌字串結束的不可見的空字元計算在內。定義符號常量 方法一 define name value 優點 ...