C#學習第二章

對象的生命週期:
構造階段:初始化對象,由構造函數完成
析構階段:刪除對象並清理,由析構函數完成
靜態成員,可以在類的實例之間共享。靜態方法不需要實例化,可以直接使。類的靜態成員有下劃線標註。

靜態類:其只能包含靜態成員。類不能夠實例化,但是能夠有一個靜態構造函數。
關於釋放資源:using關鍵字可以在代碼塊中初始化使用重要資源的對象,在代碼塊的結尾會自動調用dispose方法。

繼承:這個類擁有他繼承類的所有成員,兒子有爸爸的所有成員。所有兒子只能有一個爸爸,就是一個基類。專門爲兒子設立的訪問權限是protected,這個成員只有派生類和自己能夠訪問,外面人看起來就和private一樣是私有的。(兒子也不能訪問private)基類的成員可以是虛擬的,也就是說你爸爸的成員我兒子可以自己寫一個同名不同樣的,你的小金庫叫小金庫我的小內褲也可以叫小金庫。

抽象類:抽象類不能直接實例化,必須要繼承纔可以實例化。抽象類中可以有抽象成員,繼承之後你必須重新定義他們(抽象類有斜體提示)。

多態:可以使用相同的語法處理同一個基類實例化的對象。
如果Animal有一個eatfood(),子類chiken和cow,
有:Animal myAnimal = myCow;把派生類的變量myCow賦值給基本類型的變量myAnimal。
這樣,myAnimal.eatfood()調用的是myCow中的eatfood()
myAnimal.moo()則不可以,因爲牛叫不是父類中的,是cow自己的方法。只有
Cow myNewcow = (Cow)myAnimal;
myNewcow.moo();這可以。
C#中所有類都派生於同一個類object,是繼承層次結構中的根。
接口的多態性:接口不可以實例化,但是可以建立接口類型的變量。然後在支持該接口的對象上:
IComsume consumeInterface;
consumeInterface = myCow;
consumeInterface.eatfood();
相同方式可以訪問多個對象,而且不依賴於一個共同的基類,例如第二句如果賦值的不是我的牛,賦值的是我的黃瓜,黃瓜派生於蔬菜類,蔬菜類如果也有這麼一個eatfood方法就也可以使用了。

對象間的關係
包含關係:一個類包括另一個類,類似繼承。用一個字段包含對象實例就可以實現了。例如一個奶牛有一個奶頭類,奶頭類有個產奶的方法,但是對於使用奶牛這個對象的用戶來說它只需要使用奶牛自己的供應牛奶方法就夠了,他也不用去看牛的奶頭是啥樣的,他也沒權利去看。供應牛奶的方法裏就會用到這個奶頭類。
集合關係:一個類用作另一個類的多個實例的容器。(對象數組)
例如Animals包含Animal對象的一個集合,集合通常使用Add和remove方法添加和刪除集合中的項。通常有一個Item屬性根據對象的索引返回對象。

運算符重載:可以通過重載運算符來進行對象間的比較或者計算。例如你可以在重載後比較兩個奶牛對象的大小,實際是比較奶牛中設定好的某一屬性值的大小。

事件:對象可以激活或者使用事件,例如可以在Animal 對象添加到Animals集合中的時候觸發一個代碼。這個代碼不是Animals類的一部分,需要給代碼添加事件處理程序這是一種特殊類型的函數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章