標籤:row 判斷 欄位 多態 開頭 sealed object類 區別 層級
物件導向不是取代面向過程的。類、對象。“人”是類,“張三”是“人”這個類的對象。類是抽象的,對象是具體的。按鈕就是類,某個按鈕就是對象。對象可以叫做類的執行個體(Instance)。欄位Field(和某個對象相關的變數),欄位就是類的狀態(不同的對象可能不一樣的狀態就是欄位)。人這個類有姓名、年齡、身高等欄位。類不佔記憶體,對象才占記憶體。欄位描述對象特點的資料。方法Method(函數),方法就是類能夠執行的動作,比如問好、吃飯等。
類的繼承,類之間可以有繼承關係,比如“電腦”類可以從“電器”類繼承,這樣的好處是“電腦”類只需要定義自己特有的欄位、方法就可以,也就是只要定義記憶體大小、CPU型號這些欄位或者彈出光碟機等方法就可以。父類(Parent)、基類(Base)。電腦類是電器類的子類(ChildClass)。重用。父類有的子類都有。
物件導向的三個特性:封裝、繼承、多態。
類就是把一系列相關的變數(狀態)、行為定義為一個整體。欄位記錄的就是這個對象相關的資料。
欄位、方法、屬性都可以叫做類的成員Member,它們都需要定義存取層級。存取層級的用處在於控製成員在哪些地方可以被訪問,這樣達到物件導向中“封裝”的目的。幾個存取層級:public(任何地方都可以訪問);private(只能由本類中的成員訪問)。還有internal、protected兩個層級。永遠不要把欄位public,欄位一般都是private。欄位開頭小寫
int、decimal、bool、byte、enum等基礎類型(實值型別)是傳遞拷貝;對象(參考型別)則是傳遞引用。因為基礎類型不怎麼占記憶體,而對象則比較占記憶體。
函數間傳遞對象。為物件變數重新賦值。p2=p1是讓p2指向p1指向的對象。
屬性開頭字母大寫,欄位開頭字母小寫。只用set或者只用get就可以定義唯讀或者唯寫屬性(唯寫的不常見)。(.Net3.x)簡化set、get:public int Age{get;set;}。適合於set、get中沒有特殊邏輯代碼的情況。允許外部存取的值一定要聲明為屬性。欄位和屬性的區別是什嗎?屬性看似欄位、不是欄位,可以進行非法值控制,可以設定唯讀。set、get塊內部其實就是get_***、set_***方法。
不要在類定義中寫多行代碼,多行代碼必須定義在方法中,只能在聲明欄位等地方調用一個有傳回值的一行代碼。
建構函式用來建立對象,並且可以在建構函式中對對象進行初始化。建構函式是用來建立對象的特殊函數,函數名和類名一樣,沒有傳回值,連void都不用。建構函式可以有參數,new對象的時候傳遞函數參數即可。建構函式可以重載,也就是有多個參數不同的建構函式。如果不指定建構函式,則類有一個預設的無參建構函式。如果指定了建構函式,則不再有預設的無參建構函式,如果需要無參建構函式,則需要自己來寫。
定義類的時候不指定父類,則父類是Object類。Object類是任何類的直接或者間接父類。所有類都是Object的子類。
()轉換和as 轉換的區別:如果轉換失敗()會報異常,而as則會返回null。
if (p1 is Chinese)//is運算子結果就是bool,表示是否是指定的類型。is用來判斷變數指向的對象是否是指定的類型或者指定類型子類類型。as可以起到判斷類型和轉換的雙重作用。
try catch。Exception ex 異常也是對象。Exception 類主要屬性:Message、StackTrace。發生異常後程式預設就退出了,try代碼塊中的後續代碼不會被執行。catch以後的代碼則會繼續執行。扔出自己的異常,扔:throw,抓住:catch。
const常量。常量名要大寫。一定不會變化的值才能聲明為常量。不用new就能用的方法:static方法,static方法其實就是普通函數。在static成員中可以調用其他static成員,但是不能調用非static成員。在非static成員中可以調用static成員。靜態類,不能被new的類就是靜態類。靜態類一般用來實現一些函數庫。sealed不能被繼承。
C#物件導向基礎