![](/img/trans.png)
[英]Force calling the derived class implementation within a generic function in C#?
[英]Calling a Derived class ovverridden function in c#
我有一個用作父類的類,它具有c()函數,我想在派生類中重寫它,但是調用了基類c函數。 這是我班的偽代碼。可能是這個關鍵字給了它整體一個不同的含義
public Class BaseRepository
{
public A()
{
this.c();
}
public B()
{
this.c();
}
protected virtual c()
{
enter code here
}
}
當我上這堂課時
class customRepo:BaseRepository
{
protected override c()
{
...does something
}
}
我的自定義回購函數未使用自定義回購類中的c()
,但正在使用基本回購類函數。 誰能告訴我為什么會這樣嗎?
發生這種情況的最可能的原因(也是我唯一能想到的)是您實例化了BaseRepostiory
而不是customRepo
對象。
多態會調用實際創建的類型中最派生的函數,因此創建customRepo
對象將調用customRepo.C,而創建BaseRepository
將調用BaseRepository.C。
更進一步地講,類並不神奇地知道它們的派生,也不調用派生的方法。 這是有道理的,因為如果您有多個派生,您將調用哪種方法? 以下行將按您期望的方式工作(調用派生類):
BaseRepository custom = new customRepo();
custom.A();
這將不會:
BaseRepository base = new BaseRepostiory();
base.A();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.