關於基本類和派生類的基本問題。

2021-04-19 21:36:21 字數 1759 閱讀 1722

1.基類和派生類的一些基本概念

class b : a{}

a是基類,b是派生類.

乙個類最多隻允許從乙個類中派生.

class c : b{}

b還可以充當c的派生類

繼承總是隱式為public的,system.object是所有類的根

編譯器會把你的類悄悄的編譯成 class a : system.object{}

2.呼叫基類的建構函式

class b : a}

3基類派生類物件之間的關係

class a{}

class b : a {}

class c: a {}

b b = new b();

c c = b;  //這樣寫是錯誤地,因為型別不同

a a = b; //這樣寫是正確的,但是一定要注意:

這樣做有乙個明顯的限制 a 物件只能訪問基類中的成員不能訪問派生類中的成員

這就是為什麼c#完全物件導向的原因,因為c#中所有的東西都繼承自system.object,任何東西都能賦給乙個object變數

4.方法的隱藏

如果乙個基類有n個方法和n個派生類,這n個派生類裡又分別有n個方法.你想過會出現什麼問題嗎?對!就是會遇到完全一樣簽名的方法(方法名/引數的數量/型別完全一樣)

如果出現這樣的情況,在編譯過程中將收到乙個警告,不要驚慌,僅僅是警告而已,不會影響編譯的過程.

我覺得應該認真的對待這個警告,如果派生類的乙個物件將呼叫基類的乙個方法,然而這個方法又在這個派生類裡有相同簽名的方法!那編譯器該怎麼辦?

物件呼叫的是派生類裡的方法,

這種現象在微軟官方叫

方法的隱藏,

如果不想看到那個警告,可以在派生類中與基類同簽名的方法前面加個new關鍵字,告訴編譯器:我會為我造成的結果負責,不要警告我!注意這個關鍵字只是起個遮蔽警告的作用,你明白我的意思嗎?(派生類的物件照樣還是不能呼叫基類中同簽名的方法,呵呵,還是再補一句吧,)

5.方法的覆蓋

先看個例子:

class

nvren

class

meinv : nvren

class

weizhi : nvren

nvren a 

=new

nvren();

meinv b 

=new

meinv();

weizhi c 

=new

weizhi();

console.writeline(a.leixing());

console.writeline(b.leixing());

console.writeline(c.leixing());

當呼叫第三個writeline時,程式輸出了"這是個女人",

這種同乙個語句呼叫不同方法的現象稱為多型性(物件導向的一大特性啊!)

使用virtul和override一定要注意:

(1)兩個方法必簽名相同!

(2)兩個方法均不能是private方法,且必須有相同的可訪問性!

(3)不要試圖override沒有virtual的方法!

(4)不要試圖不用override就覆蓋基類的virtual方法(那就成了方法的隱藏了)!

在給你個小竅門:

乙個override方法將隱式的成為virtual方法,他本身可在未來的乙個派生類裡被覆)

mysql 的基本問題 MySQL 基本問題整理

整理 mysql 安裝部署運維問題解決優化記錄。1 安裝 系統為 centos7 1 rpm 包方式安裝yum install wget wget wget 解壓到某個路徑,安裝全部的 rpm 包yum install mysql rpm 2 yum 庫方式安裝 可參考官網切換版本 rpm ivh ...

執行緒和程序的基本問題

執行緒和程序的比較 1.程序是資源分配的基本單位。2.執行緒是獨立排程的基本單位。3.在同乙個程序中,執行緒的切換不會引起程序的切換。在不同的程序中進行執行緒切換,如從乙個程序中的執行緒切換到另乙個程序中的執行緒會引起程序的切換。4.乙個程序至少包含乙個執行緒,執行緒共享整個程序的資源 5.程序結束...

關於驅動能力的基本問題

我一直都不明白驅動是什麼.一般的說驅動乙個負載,我想只要你的電壓達到了乙個閾值,那麼就可以驅動這個負載啊,為什麼有時候又說驅動能力不夠了?為什麼說乙個沒有輸出緩衝的op是驅動不了小電阻和大電容負載的了?我直接在這個op後面接個大電容或者乙個小電阻負載有什麼影響了?當我用運放驅動乙個大的mos管的時候...