C 複習(三)建構函式 this關鍵字 靜態變數

2021-08-25 19:48:42 字數 2227 閱讀 4643

再上半天班就清明放假啦,最近收穫還是頗大的,每天除了工作,剩下的時間過得還算充實——複習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 ...