如何实现基类的虚方法,并在c#中的覆盖方法中获取基方法实现[重复]

Posted

技术标签:

【中文标题】如何实现基类的虚方法,并在c#中的覆盖方法中获取基方法实现[重复]【英文标题】:how to implement virtual method of base class and also get the base method implementation in override method in c# [duplicate] 【发布时间】:2017-06-07 14:36:48 【问题描述】:

我有一个抽象类 A,它有部分实现的虚拟方法,它在类 B 中继承。我想在派生类中实现虚拟方法,我应该如何在派生类中获得基本实现。 例如。

public abstract class A

    public int Sum  set; get; 
    public virtual void add(int a, int b)
    
        Sum = a + b;
    

class B : A

    public override void add(int a, int b)
    
        // what should i write here
    

【问题讨论】:

@Derlin 我认为对重复链接使用 C++ 线程是不公平的(这个主题看起来很基础)。 哎呀,对不起,我看错了。我以为是 C++,而不是 C#。 我仍然很确定这个问题之前已经被问过,也是在 C# 的上下文中 【参考方案1】:

覆盖虚拟方法就是这样做的,覆盖默认(基本)实现并将其替换为新实现。但是,如果您没有为虚拟方法提供任何覆盖的实现,您将自动获得基本实现。因此,您的问题的答案很简单首先不要覆盖add 方法

class B : A 

但是,如果您需要保留基本实现但希望扩展它,您可以使用base 关键字从派生类显式调用基本实现。例如:

class B : A

    public override void add(int a, int b)
    
        base.add(a, b);
        DoSomethingElse();
    

【讨论】:

这是正确答案!【参考方案2】:
public abstract class A

    public int Sum  set; get; 
    public virtual void add(int a, int b)
    
        Sum = a + b;
    


class B : A

    public override void add(int a, int b)
    
        //do your sufff

        //call base method of class A
        base.add(a, b);
    

【讨论】:

【参考方案3】:

只需调用您的基类函数:

class B : A

    public override void add(int a, int b)
    
        // do operation related to derived class 
        // call your base function
        base.add(a, b);
    

【讨论】:

以上是关于如何实现基类的虚方法,并在c#中的覆盖方法中获取基方法实现[重复]的主要内容,如果未能解决你的问题,请参考以下文章

抽象派生类中的抽象方法覆盖/实现抽象基类的抽象或具体方法。如何以及为啥?

C++:多态公有继承中的虚方法

delphi中覆盖override父类的静态方法和虚函数有啥不同?

c++ 中如何调用基类的虚函数?

C++子类如何调父类的虚函数

深入理解C++ 虚函数表