c#类设计用于具有继承的字段

And*_*ell 2 c# inheritance

我有一个C#类,我想为不同的场景重用它.根据具体情况,某些字段的值需要更改.我正在考虑构建一个抽象基类然后继承.后代类的构造函数将包含新的字段值.像这样的东西:

public abstract Class MyBaseClass
{
   protected string var1;
   protected string var2;
   protected string var3;
   public MyBaseClass()
   {
      var1 = string.empty;
      var2 = string.empty;
      var3 = string.empty;
   }
   public bool myfunc()
   {
       //code to do something with var1...var3
   }
}
  public class myderivedclass: MyBaseClass
 {
    public myderivedclass()
    {
     //constructor for derived class
     base.var1 = "whatever";
     base.var2 = "something";
     base.var3 = "somethingelse";
    }
 }

 public class myotherderivedclass: MyBaseClass
 {
    public myotherderivedclass()
    {
     //constructor for derived class
     base.var1 = "new";
     base.var2 = "newer";
     base.var3 = "newest";
    }
 }
Run Code Online (Sandbox Code Playgroud)

然后,我将实例化myderivedclass或myotherderivedclass并调用myfunc之类的函数来完成工作.有没有更好的方法来处理字段中的这些更改或这是一个好方法?

谢谢.

Tho*_*que 5

我不知道受保护的字段是否真的被认为是一种不好的做法,但在我看来这是一种代码味道.字段通常是实现细节,派生类不应该依赖于其基类的实现细节.

清洁器的方法是改变var1,var2var3以虚拟性质,并且在派生类覆盖它们.

public abstract Class MyBaseClass
{
   protected virtual string var1 { get { return ""; } }
   protected virtual string var2 { get { return ""; } }
   protected virtual string var3 { get { return ""; } }

   public bool myfunc()
   {
       //code to do something with var1...var3
   }
}

 public class myderivedclass: MyBaseClass
 {
     protected override string var1 { get { return "whatever"; } }
     protected override string var2 { get { return "something"; } }
     protected override string var3 { get { return "somethingelse"; } }
 }
Run Code Online (Sandbox Code Playgroud)