C# 如何拥有一个默认的方法,同时仍然能够覆盖它?

C# 如何拥有一个默认的方法,同时仍然能够覆盖它?,c#,C#,这是一个C#项目 我从基类继承了几个类。大多数子类都有相同的行为,而有些子类的行为则不同 我正在使用new关键字 public class Parent { public DataTable FetchScore() { // blahblah } } public class ChildNormal : Parent { } public class ChildOdd : Parent { public new DataTable Fetch

这是一个C#项目

我从基类继承了几个类。大多数子类都有相同的行为,而有些子类的行为则不同

我正在使用
new
关键字

public class Parent
{
    public DataTable FetchScore()
    {
        // blahblah
    }
}

public class ChildNormal : Parent
{
}

public class ChildOdd : Parent
{
    public new DataTable FetchScore()
    {
        DataTable dt = base.FetchScore();
        // blahblah
    }
}
但是该版本说使用
new
不是一个好的实践

我也不能使用
virtual
override
,因为我需要一个默认值。我不想多次复制同一个重写实现


如何在C#中实现这一点?

您需要声明基
虚拟
(这意味着它可以在必要时被重写),并且
在需要不同于原始行为的地方重写它。非重写的派生类的行为与基类一样

public class Parent()
{
    public virtual DataTable FetchScore()
    {
        // blahblah
    }
}

public class ChildNormal() : Parent
{
}

public class ChildOdd() : Parent
{
    public override DataTable FetchScore()
    {
        DataTable dt = base.FetchScore();
        // blahblah
    }
}

您可以使用virtual和override,只需将virtual基类方法放在基类中即可。另请参阅为什么使用
new
可能不是您想要做的事情。