c# 有没有办法让我的基类和派生类分别实现接口方法
本文关键字:实现 方法 接口 派生 有没有 基类 我的 | 更新日期: 2023-09-27 17:56:06
我知道这个问题令人困惑,但很难为这个问题想出一个好的标题,所以我会在这里描述更多。
我有一个接口 A,有 2 种方法,IsValidRow()
和 IsFileValid()
我有一个基类 B 和一个派生类 C这里的目标是我希望基类实现IsFileValid()
,这样它就可以被从基类派生的所有类继承,每个派生类来实现IsValidRow()
。
问题是IsFileValid()
打电话给IsValidRow()
里面。如果我这样做
B:A
A 要求在 B 中实现IsValidRow()
。
目前,我的派生类 C 继承自基类和接口 atm。
只要满足 2 种方法的要求,我不介意重组所有内容(一种将在基类或其他东西中实现一次并跨继承,而另一种将在每个派生类中实现)
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
}
}
这两种情况都有可能。
对于可选可重写的方法,将基类方法声明为子类中的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;
}
}
您可以将方法IsValidRow()
标记为abstract
:
namespace test
{
interface A
{
bool IsFileValue();
bool IsValidRow();
}
abstract class B : A
{
public bool IsFileValue()
{
return IsValidRow();
}
public abstract bool IsValidRow();
}
class C : B
{
public override bool IsValidRow()
{
return true;
}
}
}
我有一个解决方案是使用接口隔离原则。 这意味着声明两个interfaces
。第一个有一个IsFileValid()
的方法,第二个接口实现第一个接口,并有另一个方法,IsFileValid()
如下
Interface A { void IsFileValid(); }
Interface B : A { void IsValidRow();}
基类实现接口A
,所有派生类都像这样实现接口B
。
public class Base : A
{
void IsFileValid(){ // immplementaion details}
}
public class Child : Base, B
{
void IsValidRow(){// immplementaion details}
}
快乐编码