2017-08-17 122 views
0

我試圖設計可控制/使用多個數據庫的應用程序繼承,我認爲這將是封裝在接口一切是個好主意,但它似乎我已經無意中發現的第一個方法 我的接口是:實例化問題通過抽象類

interface IConnect<T> 
    { 
     T dbConnection(String dbConnectionString); 
    } 

我的抽象類是:

abstract class SqliteConnect :Iconnect<SQLiteConnection> 
    { 
     public abstract SQLiteConnection dbConnection(String dbConnectionString); 
    } 

的具體實施是:

class SQLiteSpecialConnect:SqliteConnect 
    { 
     public override SQLiteConnection dbConnection(String fileToConnect) 
     { 
      return new SQLiteConnection("Data Source=" + fileToConnect); 
     } 
    } 

但是,當我嘗試實例化它,我得到

Iconnect<SQLiteConnection> sqliteConObj= new SQLiteSpecialConnect().dbConnection("SomeConnectionString"); 

cannot implicitly convert type System.Data.SQLite.SQLiteConnection to Iconnect<System.Data.SQLite.SQLiteConnection>

所以我可以用這個實現,或者是沒有去?

+2

什麼是「新SQLiteSpecialConnect:SqliteConnect()」?它不應該只是「新的SQLiteSpecialConnect()」嗎?乍一看,其他一切看起來都很好。 – michauzo

+0

壞複製粘貼... – John

+2

是啊,當然'SQLiteConnection = iConnect的'... - 使用'iConnect的 sqliteConObj =新SQLiteSpecialConnect()'然後'sqliteConObj.dbConnection( 「SomeConnectionString」 )' – Corak

回答

2

它應該是這樣的:

IConnect<SQLiteConnection> sqliteConObj = new SQLiteSpecialConnect(); 
SQLiteConnection connection = sqliteConObj.dbConnection("SomeConnectionString"); 

問題是你要立即調用該方法,從而返回類型爲SQLiteConnection

+0

以及這個工程...:)... – John

+0

@約翰 - 如果是這樣,你可能想考慮接受這個答案。 – Corak