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)
两种情况都有可能。
对于可选的可重写方法,请将基类方法声明为子类中的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)