【问题标题】:how to implement virtual method of base class and also get the base method implementation in override method in c# [duplicate]如何实现基类的虚方法,并在c#中的覆盖方法中获取基方法实现[重复]
【发布时间】: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# 的上下文中

标签: 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);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-06-02
      • 2010-11-22
      • 2012-12-04
      • 2018-08-01
      • 2020-11-21
      • 2011-11-03
      • 2021-11-02
      • 1970-01-01
      相关资源
      最近更新 更多