我知道这个问题很困惑,但很难为这个问题想出一个好的标题,所以我会在这里描述更多。
我有一个带有 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
}
}
最佳答案
这两种情况都是可能的。
对于可选的可覆盖方法,在子类中将基类方法声明为 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;
}
}
关于c#有没有办法让我的基类和派生类分别实现接口(interface)方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38269616/