C 委託的引數型別抗變

2021-05-12 11:02:24 字數 324 閱讀 3878

原則:

1、把派生類物件傳給基型別的引數,這完全可以,多型性

能夠使得在程式執行的時候,基型別完整確認繫結到子類物件

2、p是個基類物件也可以執行,原因在於真正的**method2

中處理的是它的引數基類物件的資料,所以不會出現基類

沒有的部分,所以使用的各個成員都是有意義的;派生類那

就更沒有問題了,因為派生類完整包含了基類,基類有的

派生類的都有;但是反過來,method2如果使用的是派生類

物件的引數,這是實際呼叫的時候,傳入派生類是沒問題的

傳入基類則會出現問題,因為派生類有的資料,基類可能沒有

7 1 8 委託中的協變和抗變

7.1.8 協變和抗變 委託呼叫的方法不需要與委託宣告定義的型別相同。因此可能出現協變和抗變。1.返回型別協變 方法的返回型別可以派生於委託定義的型別。在下面的示例中,委託mydelegate定義為返回delegatereturn型別。賦予委託例項d1的方法返回delegatereturn2型別,d...

C 抗變和協變

從.net3.5開始 加入了這兩個概念。在4.0中更是加強了 這裡就這兩個概念做乙個分析 委託呼叫的方法不需要與委託宣告定義的型別相同。因此可能出現協變和抗變。1.返回型別協變 方法的返回型別可以派生於委託定義的型別。在下面的示例中,委託mydelegate定義為返回delegatereturn型別...

c 協變和抗變 C 中協變與抗變(逆變)

泛型在.net 2.0中正式的引入。在使用泛型的過程中,聯絡上物件導向的繼承性。往往很容易想當然敲出類似以下 list animallst new list 顯然這樣編譯是不通過的。雖然dog和animal之間有繼承性,但是list和list這兩個類之間並沒有繼承性。如果要解決這樣的問題,用上協變與...