2015-09-07 39 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; 
    } 
}