让派生类实现属性的最佳实践

本文关键字:最佳 属性 派生 实现 | 更新日期: 2023-09-27 17:59:30

给定一个简单的类层次结构,其中每个类都派生自一个抽象基类。每个派生类都需要以某种方式提供枚举"值",基类将在某些基方法中使用该值
例如

基本类别:

public abstract class AbstractFoo
{
  bool SaveFoo()
  {
    switch (BarType){...}
  }
}

和派生类

public class BananaFoo:AbstractFoo
{
  //barttype = fruit;
}
public class WhaleFoo:AbstractFoo
{
  //barttype = mammal;
}

有很多方法可以确保从AbstractFoo派生的所有类实现属性"enum-BarType"

public abstract BarType BarType{get;}

在每个派生类中,我可以实现BarType来返回正确的类型,或者添加一个抽象方法来做类似的事情。

public BarType BarType{get{return _bartype;}}

或者添加一个具体的方法来返回一个字段——然后我需要记住添加字段,但它的键入(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) {
  }
}

我无法评论正确的方法是什么,但我一直在基类型上使用抽象属性(以强制实现),然后从子类型属性返回常量。

例如:

public BarType BarType{get{return BarType.WhaleFoo ;}}

假设您只为每个子类返回一个枚举值,据我所知,最好的方法是在基类中实现一个抽象属性,然后在每个子类中实现它。

public abstract class A {
    public BarType Foo;
    public enum BarType {
        Value1,
        Value2
    }
}
public class B : A {
    public BarType Foo { get { return BarType.Value1; } }
}