我有几个类必须连接到某些东西才能执行任何操作。理想情况下,我使用带有1个参数的构造函数创建一个基类。然后这些类继承自这个基类,如下所示:
public class BaseErase
{
private string _connectionString;
public string ConnectionString
{
get
{
return _connectionString;
}
set
{
_connectionString = value;
}
}
public BaseErase(string connectionString)
{
ConnectionString = connectionString;
}
//public void SetConnection(string connectionString)
//{
// ConnectionString = connectionString;
//}
}
然后我的派生类将继承BaseErase,如下所示:
class ToEraseClass : BaseErase
{
public void GetData()
{
string connect = ConnectionString;
Console.WriteLine(connect);
}
}
最后,我实例化我的类并调用GetData():
ToEraseClass toErase = new ToEraseClass(ConnectionString);
toErase.GetData();
不幸的是,构造函数不是继承的,所以这些都不起作用。我知道对此的修复,但它要求我修改每一个类。
我的问题是,这里继承的目的是什么?
感谢。
答案 0 :(得分:1)
编辑: 在回复您的评论如下:
在这种情况下,我可以轻松地在每个类中添加一个方法
在这种情况下,继承正在做的是消除在每个类中添加方法的需要。因为如果你在每个类中添加方法,那么你必须在每个类中维护该方法。
Duplicate code is a very strong code smell that you should look to eliminate as soon as possible
为了消除重复,您可以add a has-a relationship进行重复操作。创建一个ConnectionFangler类,所有的橡皮擦类都引用它来管理它们的连接。或者通过创建一个绑定连接的基类来讨论add an is-a relationship。
如果您的所有基类都在设置连接字符串,那么我说这里没有继承点。继承应该是一种关系,而不是一种关系。
因为您似乎不想添加对基础构造函数的调用....
如果你想确保每种类型的Erase类都有一个连接字符串,你可以让它们实现一个具有该属性的接口
public IEraseConnection
{
string ConnectionString {get;set;}
}
然后,您可以在构造函数中或直接设置连接字符串。无论哪种方法最适合您的应用。
为了完整性,如果你想使用基类,那我就做这样的事情:
using System;
namespace ExampleApp
{
class Program
{
static void Main(string[] args)
{
new ToEraseClass("Boom!").GetData();
Console.ReadLine();
}
}
public class BaseErase
{
protected string ConnectionString
{
get; private set;
}
public BaseErase(string connectionString)
{
ConnectionString = connectionString;
}
}
public class ToEraseClass : BaseErase
{
public ToEraseClass(string connectionString) : base(connectionString)
{}
public void GetData()
{
Console.WriteLine(ConnectionString);
}
}
}