再上半天班就清明放假啦,最近收穫還是頗大的,每天除了工作,剩下的時間過得還算充實——複習c#、跑步、學習英語。今天開始複習c#物件導向。
一、成員變數和區域性變數
類中的變數為成員變數或者例項變數(不包括靜態變數,即類變數),成員變數可以不初始化,預設情況下,int變數為0,string變數為null。
方法中的變數為區域性變數,該值必須初始化。
二、建構函式:給物件進行初始化
格式:函式名等於類名、沒有返回值
建構函式和一般函式的異同:a.建構函式必須沒有返回值,名字必須與類名相同;一般函式可以有返回值,函式名不可以與類名相同。b.建構函式在建立物件時會直接呼叫,給物件進行初始化,只能呼叫一次;一般函式在需要使用這個函式時才會被呼叫,可以被呼叫多次。c.建構函式可以呼叫一般函,反之不可。d.都可以有過載。e.都可以用return關鍵字。
建構函式不能被繼承 :建立子類物件時會呼叫父類的空建構函式,因為子類會繼承父類的內容,要先初始化父類後才能使用父類裡面的內容。
三、匿名物件:當物件裡的成員僅需呼叫一次時可以使用匿名物件。
new car().name="";
new car().color=color.blue;//兩次匿名,兩次物件
四、this關鍵字
this代表其所在函式所屬物件的引用;換言之,this代表本類物件的引用。
this可以用來區分區域性變數和成員變數的重名。
可以使用this進行建構函式之間的呼叫,this()代表引用無參建構函式。
public drawline()
public drawline(int i):this()
五、static
static是乙個修飾符,修飾成員(變數、方法、屬性、建構函式)。
static修飾的成員被所有物件共享。
static修飾的成員優先於物件存在(隨著類的載入而存在)。
static修飾的成員只有一種呼叫方式:類名.靜態成員。
static修飾的是共享資料,而物件中的為特有資料;共享資料只佔乙份記憶體。
六、成員變數和靜態變數的區別?
a.生命週期不同
成員變數隨著物件的建立而存在,隨著物件的**而釋放
靜態變數隨著類的載入而存在,隨著類的消失而消失。生命週期更長。
b.呼叫方式不同
成員變數只能被物件呼叫
靜態變數只能被類名呼叫
c.別名不同
成員變數又叫例項變數
靜態變數又叫類變數
d.資料的儲存位置不同
成員變數儲存在堆記憶體中
靜態變數儲存在資料共享區
七、什麼時候使用靜態?
靜態變數。如果有資料需要共享,就把資料修飾成static。
靜態函式。看這個方法中是否需要訪問非靜態的資料,如果需要訪問,那麼方法一定不是靜態的; 如果不需要則可以修飾成靜態。
修飾成靜態的方法可以直接被類名呼叫不需要建立物件,十分方便。
八、static的侷限性
靜態的只能訪問靜態的,而非靜態的都可以訪問。
靜態方法中不能使用this,base。
vs中主函式是靜態的。
九、繼承:為多型提供了前提
繼承的好處:提高**的復用性;讓類與類之間產生了關係。
c#不支援多重繼承,但支援多層繼承;
千萬不要為了提高**的復用性而去使用繼承;
子父類中可以存在相同名稱的變數與方法,此時父類中的也會被繼承,只是會隱藏。 一般情況下,子類中的變數或方法用new修飾。 對於相同名稱的方法,我們一般用virtual修飾父類方法、override修飾子類方法,也就是重寫、覆蓋。
overload和override的區別?
overload(過載)出現在同乙個類中,並且是同名函式,引數不同
override(重寫)是出現在子父類當中,並且是同名函式,引數也一樣(宣告一樣)
十、base關鍵字:代表父類物件
class a
}
class b : a
}
子類中建構函式預設都會訪問父類中無參建構函式,因為每乙個建構函式都有乙個預設的關鍵字base。
public class drawline : object
}
十一、sealed
sealed表示密封,不被繼承,可修飾類(一般為子類)和方法、屬性。
sealed修飾的方法不可以被覆蓋,當sealed修飾方法、屬性的時候,必須要與override關鍵字一起用(合著只能修飾子類的方法、屬性了)。
建構函式,This關鍵字
建構函式 即構建創造物件時呼叫的函式。在new的時候自動執行,給物件進行初始化。建立物件都必須要通過建構函式初始化。有參和無參 乙個類中如果沒有定義過建構函式,那麼類中會有乙個預設的空引數建構函式。特點 1.函式名與類名相同。2.無返回值。例項變數的預設值 原始數字型別的例項變數預設值為0,布林型變...
C 建構函式explicit關鍵字
前陣在看muduo原始碼的時候,發現很多建構函式用到了explicit關鍵字,坐了一天的火車今天剛好沒事花一點時間稍微看了一蛤。首先,這個explicit關鍵字針對的場景是只有乙個引數的建構函式,因為這樣的建構函式除了是乙個構造器以外,還有乙個預設的隱式型別轉換 形參型別到類型別的隱式轉換。看乙個例...
類的建構函式 this 關鍵字
今天研究了一下mvc 的繫結指令碼,繫結樣式類。看了下原始碼,裡面有乙個 建構函式裡面 有乙個 this 關鍵字。我想,怎麼我的專案沒有用到呢。於是做了乙個例子示範了一下。using system using system.collections.generic using system.linq ...