从基类继承字段的正确方法

本文关键字:方法 字段 基类 继承 | 更新日期: 2023-09-27 18:34:54

下面的代码是否足够好,还是应该使用接口或抽象类之类的东西?

我有一些通用代码,但我没有看到抽象类或接口的原因。

此外,如果不探索或悬停在BaseTask上,就无法告诉serviceClient来自BaseTask。 每个任务 1 和任务 2 中是否有指示这一点的内容?

public class BaseTask
{
    private string configValue1 = "abc";
    private string configValue2 = "def";
    public ServiceClient serviceClient = new ServiceClient(configValue1,configValue2);
}
public class Task1 : BaseTask
{
    public void RunTask()
    {
        serviceClient.RunTask1();
    }
}
public class Task2 : BaseTask
{
    public void RunTask()
    {
        serviceClient.RunTask2();
    }
}
public class BaseTask
{
    private readonly string configValue1 = "abc";
    private readonly string configValue2 = "def";
    private readonly ServiceClient serviceClient = new ServiceClient(configValue1,configValue2);
    public ServiceClient ServiceClient { get{ return serviceClient;} }
}
public class Task1 : BaseTask
{
    public void RunTask()
    {
        ServiceClient.RunTask1();
    }
}
public class Task2 : BaseTask
{
    public void RunTask()
    {
        ServiceClient.RunTask2();
    }
}

从基类继承字段的正确方法

从体系结构上讲,我只会将serviceClient设置为只读属性。 在风格上,我会遵循 .NET 的正确大小写约定:

private ServiceClient serviceClient = new ServiceClient(configValue1,configValue2);
public ServiceClient ServiceClient
{
    get { return serviceClient; }
} 

RunTask虚拟也可能有意义,因为您显示的实现是相同的(并且它允许您在必要时在其他实现中覆盖它(:

public virtual void RunTask()
{
    serviceClient.RunTask1();
}

如果自己创建一个BaseTask实例没有意义,那么将其抽象化以防止任何人这样做。这也表明了你的意图(即BaseTask应该只派生自(。

我还建议不要公开变量。而是将它们隐藏在属性后面。

您当前没有任何属性。如果您需要您的特定值,请尝试以下操作。

public class BaseTask
{
  private string _configValue1 = "abc";
  private string _configValue2 = "def";
  private ServiceClient _serviceClient1 = new ServiceClient(configValue1,configValue2);
  Public ServiceClient ServiceClient1
   {
    get
     {
        return _serviceClient1;
     }
   set
     {
        serviceClient1 = value;
     }  
 }
Public string ConfigValue1
 {
   get
     {
        return _configValue1;
     }
   set
     {
        _configValue1= value;
     }
 }
Public string ConfigValue2
 {
   get
     {
        return _configValue2;
     }
   set
     {
        _configValue2 = value;
     }
 }