从基类继承字段的正确方法
本文关键字:方法 字段 基类 继承 | 更新日期: 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;
}
}