簡體   English   中英

在C#中調用派生類ovverridden函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM