面向對象編程OOP(Object-Oriented Programming)
類和對象
類是對象的定義,對象是類的實現。
[屬性集信息] [類修飾符] class 類名 [:類基] //定義類的語法格式,方括號可省略,類修飾符默認為public,隱含基類默認為object
{類成員}
屬性集信息:c#語言提供給程序員的為程序中的各種實體附加一些說明
部分類修飾符:private:只能這個類的成員訪問
protected:只能被本類及本類的子類(派生類)訪問
internal:在本程序集中可訪問。
public:完全可訪問。
abstract:抽象類,含有抽象成員,不能被實例化,只能做基類。
sealed:密封類,不能再派生出其他類。
類基:定義該類的直接基類和由該類實現的接口。
類成員:由兩部分組成,一部分是以類成員聲明形式引入的類成員,另一部分是直接從它基類繼承而來的成員。
類成員聲明主要包括常數聲明,字段聲明,方法聲明,屬性聲明,事件聲明,構造函數聲明,析構函數聲明等。
當字段,方法,屬性,事件,運算符,和構造聲明中含有static修飾符時,表明是靜態成員,不能實例化。
部分類成員訪問修飾符:private/protected/internal/public 同上
常數聲明:常數表達式的值應該是一個可以在編譯時計算的值,不允許使用static修飾符,但他和靜態成員一樣,只能通過類訪問。
[屬性集信息] [常數修飾符] const 類性 標識符 = 常數表達式[] //方括號可省略,類修飾符默認為public,隱含基類默認為object
字段聲明:變量聲明列表可以用逗號來分隔多個變量,並且變量標識符還可以用賦值號設定初始值。
可用readonly修飾符,表示只讀字段。只讀字段可以在定義時或構造函數時賦值,它的值不能在編譯時確定,只能在運行時確定。常量只能在定義時賦值,常量值在編譯時已經確定,在程序中不能確定。
[屬性集信息] [常數修飾符] 類性 變量聲明列表 //方括號可省略,字段的默認修飾符為private,
構造函數和析構函數:是類中比較特殊的兩種類,分別用來對對象進行性初始化和回收對象資源。
如果一個類含有構造函數,在實例化該類的對象時就會調用,如果含有析構函數則會在銷毀對象時調用。
構造函數的名字與類名相同,析構函數的名字與構造函數形同,析構函數名字前面要加一個波浪號。
構造函數:無返回值,方法名必須是類名,如無構造函數則系統默認一個無參構造函數,可定義多個構造函數(重載:參數類型不同,個數不同,順序不同),靜態屬性與靜態構造函數(靜態構造函數的執行是系統進行控制的)
public 類名(){}
屬性:屬性的主要用途是限制外部類對類中成員的訪問權限,定義在類級別上。
[屬性集信息] [常數修飾符] 類性 屬性名
{
get{}
set{}
}
面向對象的三個主要特征:封裝、繼承、多態。
封裝具體的表現是類,類是將具有相同特征的事物封裝在一起,
存儲的是一類事物的屬性及方法;對象是類的具體實現,
表示的是一個具體的事物;
屬性和方法;但是每個對象的屬性值和方法執行的結果都是不一樣的(靜態屬性及靜態方法除外);
方法的默認修飾符是internal;頂級類默認修飾符為internal(只能是public或internal);
一個栗子:
對象:桌子
屬性:桌子的款式,桌子的高度,桌子材質
方法:放書,當材火燒,可以伸縮大小
封裝:定義了桌子類,有材質這個屬性,把(邏輯處理)封裝起來,只留接口訪問。
這個桌子,該暴露什麼,不該暴露什麼,由類的設計中覺得,private屬性用戶不能直接訪問,如果提供了接口訪問材質這個屬性,那麼可以修改這個屬性的值
通過方法修改屬性和直接修改屬性的區別:是方法修改屬性可以做限制,如果不良商人用垃圾木頭做桌子呢。那麼這個方法就可以做限制。
繼承:一個對象(桌子),有某個方法(伸縮),另一個對象(桌子)剛好沒有,最簡單的就是另外一個繼承這個伸縮方法
多態:一個對象(桌子),每個桌子都有相同的方法(放東西),但有的放電腦,有的放書。這就是多態
果然現在回頭來看還是不太懂,太難理解,還要繼續去思考。
坑先填這麼多,剩一部分回來再填。
轉載請聯系