我必须在我的应用程序中使用这两个不同的类文件。如何在另一个类文件中继承这两个类文件?
此类文件用于写入信息日志
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();
}
}
是的,我可以使用这种方法,但我正在寻找其他最好的方法吗?
答案 0 :(得分:0)
基本上,你的方法没有错。甚至还有一种名为组合而非继承的OOP设计原则,它要求采用这种方式。
想想WHILE(@N <= @Count)
BEGIN
GOTO FinalStateMent;
END
FinalStatement:
Select @CoumnName from TableName
,FileWriter是否真的专注于某种DataConnector?
我建议的是隐藏接口后面的依赖关系并通过DataConnector
的构造函数注入它们,如下所示:
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();
}
}
来实现MongoDbDataConnector
并传递此IDataConnector
而不是MsSqlDataConnector
或PostgreSqlDataConnector
。
答案 1 :(得分:0)
您的FileOperation没有理由继承Log和DataConnector。您的FileOperation使用Log和DataConnector,但它不应更改您记录的方式或连接数据的方式。
然而,您可以为将来做好准备,并为您的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;
}
}