2017-08-17 26 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

「:SqliteConnect()新しいSQLiteSpecialConnect」とは何であるので、すぐにメソッドを呼び出しているのですか?それは単に "新しい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

@John - もしそうなら、あなたはこの答えを受け入れることを検討したいかもしれません。 – Corak

関連する問題