2015-09-07 38 views
0

我必须在我的应用程序中使用这两个不同的类文件。如何在另一个类文件中继承这两个类文件?如何跨项目访问外部类文件

这个类文件中写入信息记录

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

这将会回答你的quesion,http://stackoverflow.com/questions/178333 /多继承-在-C-尖锐 –

回答

0

基本上,您的方法没有任何问题。甚至还有一个叫做的OOP设计原则,其继承,这就要求这样做。

想想DataConnector,FileWriter真的是专门研究某种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();  
    } 
} 

这种方式,你可以很容易地通过传递另换一个或两个那些依赖条件的实现正确界面的对象。例如,您可以创建一个实现IDataConnectorMongoDbDataConnector,并通过该代码而不是MsSqlDataConnectorPostgreSqlDataConnector

0

没有理由为什么你的FileOperation应该从Log或DataConnector继承。您的FileOperation使用日志和DataConnector,但它不应改变您的日志或连接到数据的方式。

你可以为将来但是准备,并创建一个接口为您的日志类,并为您的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; 
    } 
}