c# 有没有办法让我的基类和派生类可以分别实现接口方法?

ygo*_*dev 3 c# inheritance class

我知道这个问题很令人困惑,但很难为这个问题想出一个好的标题,所以我将在这里描述更多。

我有一个带有 2 个方法的接口 A,IsValidRow()并且IsFileValid() 有一个基类 B 和一个派生类 C 这里的目标是我希望基类实现IsFileValid(),因此它可以由从基类派生的所有类继承,并且每个要实现的派生类IsValidRow()

问题是内部IsFileValid()调用IsValidRow()。如果我做

B:A
Run Code Online (Sandbox Code Playgroud)

A需要IsValidRow()在B中实现。

目前我的派生类C继承自基类和接口atm。

我不介意重构一切,只要满足这两种方法的要求即可(一种方法将在基类或其他方法中实现一次并继承,而另一种方法将在每个派生类中实现)

interface IFileValidator
{
    Pair<bool, string> IsValidRow(List<string> row);

    bool IsFileValid(string file);
}

class FileValidator : IFileValidator
{
    public bool IsFileValid(string file)
    {
        // calls IsValidRow()
        IsValidRow();
    }
 }

class FacilitiesCalendarValidator : FileValidator, IFileValidator
{

    public Pair<bool, string> IsValidRow(List<string> row)
    {
            //stuff
    }
 }
Run Code Online (Sandbox Code Playgroud)

toa*_*akz 6

两种情况都有可能。

对于可选的可重写方法,请将基类方法声明为子类中的virtual和。override

对于必须由子类提供实现的方法,请将类和方法标记为abstract

您不必重写virtual子类中的方法,因此除非您明确决定,否则该实现将被继承override

例如:

 interface IInterface
 {
     int Transform(int a, int b);
     int AnotherTransform(int a, int b);
 }

 abstract class A : IInterface
 {
    public virtual int Transform(int a, int b)
    {
        return a + b;
    }

    public abstract int AnotherTransform(int a, int b);
 }

 class B : A
 {
    public override int Transform(int a, int b)
    {
        return a - b;
    }

    public override int AnotherTransform(int a, int b)
    {
       return a * b;
    }
 }
Run Code Online (Sandbox Code Playgroud)