我必须在我的应用程序中使用这两个不同的类文件。我如何在另一个类文件中继承这两个类文件?
用于写入信息日志的类文件
Public class Log
{
Public void createLog()
{
}
}
这个类文件获取连接字符串
public class DataConnector
{
public void Connection()
{
}
}
我想在这个类中继承这两个类
Public class FileOperation
{
public void FileWiter
{
}
}
在我的项目中有任何不同的方法来访问类文件吗?
我已经试过了:
Public class FileOperation
{
Log oLog=new Log();
DataConnector oDataconn=new DataConnector();
public void FileWiter
{
oLog.createLog();
}
}
是的,我可以使用这个方法,但是我在寻找其他最好的方法来做到这一点吗?
基本上,你的方法没有错。甚至有一个叫做组合优于继承的OOP设计原则,它要求这样做。
想想DataConnector
,你的FileWriter真的是专门的某种数据连接器吗?
我建议将依赖隐藏在接口后面,并通过FileOperation
的构造函数注入它们,如下所示:
public class FileOperation
{
ILog log;
IDataConnector dataConnector;
public FileOperation(ILog log, IDataConnector dataConnector)
{
this.log = log;
this.dataConnector = dataConncetor;
}
public void FileWiter
{
this.log.createLog();
}
}
通过这种方式,你可以简单地通过传递另一个实现正确接口的对象来交换一个或两个依赖。例如,您可以创建实现IDataConnector
的MongoDbDataConnector
,并传递此MsSqlDataConnector
或PostgreSqlDataConnector
。
没有理由让您的FileOperation从Log或DataConnector继承。你的FileOperation使用日志和数据连接器,但它不应该改变你如何记录或如何连接到数据。
但是,您可以为将来做准备,并为您的Log类和DataConnector创建一个接口,以便在将来的任何时候您都可以轻松地将这些类交换为另一个实现,如:public interface ILogger
{
void Log(string message);
}
public interface IDataConnector<T>
{
IList<T> ReadList(Predicate<T> matches);
T ReadItem(Predicate<T> match);
}
并为这些接口实现你的类。
在FileOperation
类中,您可以在接口上设置这些,并可能稍后使用依赖注入填充它们,如下所示:
public class FileOperation
{
public ILogger Log { get; set; }
public IDataConnector DataConnector { get; set; }
public FileOperation()
: this(new Logger(), new DataConnector<string>())
{
}
public FileOperation(ILogger log, IDataConnector dataConnector) {
Log = log;
DataConnector = dataConnector;
}
}