“c# 父類引用指向子類的實例為什麽需要強制類型轉換?”
c# 父類引用指向子類的實例並不需要強制類型轉換。當父類引用子類的實例後,如果需要使用子類特有的方法時才需要強制類型轉換。
舉例:
namespace?answer160429{
class?Animal
{
public?void?Eat()?{?}
}
//子類,繼承父類Animal
class?Bird?:?Animal
{
public?void?Fly()?{?}
}
class?Program
{
static?void?Main(string[]?args)
{
Animal?animal1;
Bird?bird1?=?new?Bird();
//父類引用指向子類的對象並不需要強制轉換
animal1?=?bird1;
//但是此時animal1不能使用Bird的方法,只能使用Animal的方法
animal1.Eat();
//?如果要使用Bird的方法,必須要進行類型轉換;
((Bird)animal1).Fly();?
}
}
}
可以這麽理解以上代碼:
父類引用子類的實例> 鳥是動物嗎? 當然鳥是動物,所以無須類型轉換;
(現在程序將壹只鳥裝進了 放動物的黑箱子裏)
現在有人問妳這個黑箱子裏的東西會吃東西嗎??
這個黑箱子只能放動物,是動物就會吃東西,所以無須打開黑箱子看裏面是什麽,就能回答說它會吃東西。
現在又有人問妳這個黑箱子裏的動物能飛嗎?
那麽黑箱子的主人就不能直接回答問題了,因為箱子是黑的,上面只標識是動物,並不知道具體是什麽動物,主人必須打開黑箱子看是不是鳥,如果是鳥才能回答說會飛。這就相當於強制轉換。
-------
以上是個人理解。