子類可以賦值給父類。(如果有乙個地方需要乙個父類作為引數,我們可以給乙個子類 )
如果父類中裝的是子類物件,那麼可以將這個父類強轉為子類物件。
usingview codesystem;
using
system.collections.generic;
using
system.linq;
using
system.text;
using
system.threading.tasks;
namespace
高山黎克特制轉換
}//////
父類
/// public
class
person
}//////
學生類繼承 person
/// public
class
student : person
}//////
老師類繼承 person
/// public
class
teacher : person}}
1.子類可以賦值給父類
在測試類中輸入:
//目的:如果有乙個地方是乙個父類作為引數,我們可以給乙個子類代替就是因為子類可以賦值給父類。子類可以賦值給父類:如果有乙個地方需要乙個父類作為引數,我們可以給乙個子類代替
//建立乙個子類物件
//student s = new student();
//記憶體中就是把父類的引用 指向了 子類的物件。
//person p = s;
//簡寫
person p = new student();
例如:join();表示把指定的分隔符放到乙個陣列裡面去。
可以看出join(string separator,params object values);第二個引數是object型別的陣列,而object是一切型別的 父類。
string.join("|", new string );
我們在這裡建立的是string陣列的物件,而這個陣列屬於object的子類。在這裡正好充分說明了子類可以賦值給父類。可以輸出檢視:
2.如果父類中裝的是子類物件,那麼可以將這個父類強轉為子類物件。在測試類中輸入:
//執行結果 :我是學生如果父類中裝的是子類物件,那麼可以將這個父類強轉為子類物件。
//強轉
student ss =(student)p;
ss.studentsayhello();
console.readkey();
說明強轉成功。再將上面這段**改為:
teacher ss =(teacher)p;執行結果:ss.teachersayhello();
console.readkey();
這裡就會發生異常,強轉失敗,在上面** person p = new student(); 父類中裝的是 student。這兩個強轉充分說明了如果父類中裝的是子類物件,那麼可以將這個父類強轉為子類物件。
那麼還有乙個問題,在黎克特制強轉時經常會拋異常,所以在我們黎克特制強轉時經常使用 is 和 as 型別轉換。
將**改為一下:
//執行結果:轉化失敗is 表示 將 p 轉換為 teacher,如果能夠轉換將在這裡返回 true,否則為 false
if (p is
teacher)
else
可以將上面**改為:
if (p is執行結果:我是學生student)
else
將上面**注釋掉,寫入下面**:
// as 表示如果 p 能夠轉換 teacher 返回 teacher 物件,否則返回乙個 null 。
我們打個斷點可以看出:teacher t = p as teacher
返回了乙個 null。換成:
C 基礎知識點 黎克特制轉換 as is
子類可以賦值給父類。如果有乙個地方需要乙個父類作為引數,我們可以給乙個子類 如果父類中裝的是子類物件,那麼可以將這個父類強轉為子類物件。建立幾個類幫助我們理解 using system using system.collections.generic using system.linq using ...
C 黎克特制轉換
首先要知道黎克特制轉換是建立在繼承基礎之上的類與類之間的轉換 寫法可以參照資料型別轉換,隱式和強制轉換的寫法。例 int a int b b為double型別。下面用 引數關係 首先定義三個類,person 父類 teacher person子類 student person子類 1.person ...
c 黎克特制轉換
黎克特制轉換 1.子類可以賦值給父類 1 如果乙個地方需要乙個父類作為引數,我們可以給乙個子類代替 class program console.writeline str console.readkey public class person public class student person ...