Blu*_*ppy 0 c# inheritance abstract-class
给定一个简单的类层次结构,其中每个类都是从抽象基类派生的.每个派生类都需要以某种方式提供一个枚举"值",基类将在某些基本方法中使用.
例如
基类:
public abstract class AbstractFoo
{
bool SaveFoo()
{
switch (BarType){...}
}
}
Run Code Online (Sandbox Code Playgroud)
和派生类
public class BananaFoo:AbstractFoo
{
//barttype = fruit;
}
public class WhaleFoo:AbstractFoo
{
//barttype = mammal;
}
Run Code Online (Sandbox Code Playgroud)
我可以通过多种方法确保从AbstractFoo派生的所有类实现属性"enum BarType"
public abstract BarType BarType{get;}
Run Code Online (Sandbox Code Playgroud)
在每个派生类中,我可以实现BarType以返回正确的类型,或者添加一个抽象方法来执行非常类似的操作.
public BarType BarType{get{return _bartype;}}
Run Code Online (Sandbox Code Playgroud)
或者添加一个具体的方法来返回一个字段 - 然后我需要记住添加字段,但是输入的次数要少得多(C&P)?
建议的方法是什么?
另一种选择是强制派生类将Foo值传递给基类:
public abstract class A {
private readonly BarType _foo;
protected A(BarType foo) {
_foo = foo;
}
// Does Foo need to be public or is it only used internally by A?
public BarType Foo { get { return _foo; } }
}
public class B : A {
public B() : base(BarType.Value1) {
}
}
Run Code Online (Sandbox Code Playgroud)