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

标签 c# class inheritance

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

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

问题是 IsFileValid() 在里面调用了 IsValidRow()。如果我这样做

B:A

A 要求在 B 中实现 IsValidRow()

目前我的派生类C继承自基类和接口(interface)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
    }
 }

最佳答案

这两种情况都是可能的。

对于可选的可覆盖方法,在子类中将基类方法声明为 virtualoverride

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

您不必覆盖子类中的虚拟方法,因此实现会被继承,除非您明确决定覆盖

例如:

 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;
    }
 }

关于c#有没有办法让我的基类和派生类分别实现接口(interface)方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38269616/

相关文章:

c# - 如何使用 JSON.Net 获取自引用 C# 实体来序列化子项?

c# - png格式的桌面捕获

java - 地形绘制Java

javascript - event 是一个全局变量,可以在回调链中的任何地方访问吗?

inheritance - TypeScript:应该推断继承方法中的参数类型

c# - 按值传递接口(interface)成员

c# - 在一段时间内禁用所有执行

c++ - 使用/创建一个简单的有理数对象

java - 当在不同的类中使用时,我的PrintWriter的值变得无效

c++派生基类Friend函数访问Parent上的private?