2012-03-01 12 views
2

すべて私は、複数のSQLデータベースを定期的に接続して切り離す必要のあるアプリケーションを持っています。私はこれらのデータベースのすべてを反復可能なコレクションとして保持するクラスを作成したいと考えています。これを行うには、私はICollectionから継承していますが、私は理解していないです、いくつかのthinkgがあります:.NET ICollectionクラスの基礎

class SqlDataBases : ICollection<SqlDb> 
{ 
    private List<SqlDb> dbColl; 

    public SqlDataBases() 
    { 
     dbColl = new List<SqlDb>(); 
    } 

    // Add an index to the collection. 
    public SqlDb this[int _nIndex] 
    { 
     get { return (SqlDb)dbColl[_nIndex]; } 
     set { dbColl[_nIndex] = value; } 
    } 

    // et al. 
} 

public class DbEnumerator : IEnumerator<SqlDb> 
{ 
    // ... 
} 

class SqlDb 
{ 
    private string strMdfFullPath; 
    private string strLdfFullPath; 
    private bool bIsAttached; 

    public SqlDb(string _strMdfFullPath, string _strLdfFullPath, bool _bIsAttached) 
    { 
     this.strMdfFullPath = _strMdfFullPath; 
     this.strLdfFullPath = _strLdfFullPath; 
     this.bIsAttached = _bIsAttached; 
    } 
} 

あなたは、このような 『追加』などのメソッドを追加しなければならないとき私の質問は「なぜ '、全くICollectionから継承されます自分で?それとも、MSDNで示唆されているように、この自分で行う必要がありますか?私は、 『一言で言えばC#]を』読んでいると、この質問は、この偉大な本の中で取り組まれていないが目立つものですなどが含まれています。

私は謝罪、私はここに何かがないことを知っています...

+0

私の考えは同じです。必要なところで 'List 'を使ってみませんか?それはあなたが私が見る限りで実装しようとする機能を持っています。 –

+1

@Killercam、以下の1つのコメントは、辞書<>を使用することを示唆しています。あなたの接続を名前で何度も "検索"したくない場合は、データベース名のようなキーを指定することができるため、Dictionary <>のほうが良いでしょう。 –

+0

ご協力いただきありがとうございます。 – MoonKnight

答えて

3

私の質問は「あなたが 'Add'、 'C​​ontains'などのメソッドを自分で追加しなければならないとき、なぜICollectionを継承するのですか?

ICollection<T>インタフェースである - それはちょうどあなたが実装する必要がありますメンバーを指定します。すでにがあるものから派生したい場合は、Collection<T>をご覧ください。独自の特殊な特性を持つ独自のコレクションデータ構造を作成したい場合は、インターフェイスを自分で実装することになります。

あなた自身のクラスがなぜ必要なのかは明らかではありません。List<SqlDb>をクライアントコードで直接使用するのはなぜですか?

+0

ありがとうジョン、私の愚かさを整理しました。そして、あなたが正しいです、私はここで 'List 'が必要です - しかし、私は自分のコレクションクラスを作成していないし、それをやっていると思っていましたが、それは愚かです。御時間ありがとうございます。 – MoonKnight

2

インターフェイスはスケルトンのみです。彼らは、彼らは

Interfaces

3

は、あなたが直接List<SqlDb>を使用する方法について考えたことがありますなど、すべてのメソッド、プロパティのシグネチャのみを含むされているすべてのロジックが含まれていませんか?

SqlDataBasesクラスでどのようなことを期待しているのかは分かりません。

List<SqlDb>を直接使用することができない場合は、ICollection<SqlDb>ではなくList<SqlDb>から継承すると考えてください。 「あなたは、このような 『追加』などのメソッドを追加する必要があるとき、なぜ、すべてでいるICollectionから継承する」応答

+1

私はそれを辞書に入れました...しかし、これの理由はまだ分かりません – b0rg

1

:あなたが必要としない場合

あなたがいるICollectionを継承する必要はありませんが/追加したいです/次など。

2

ICollection <から継承する理由は、独自のカスタムコレクションタイプを作成することです。あなたが見つけるまで、あなたはICollectionを<>から継承されたので、その後、どこかの方法は、ICollectionを<>の入力変数を持って、新しいカスタムコレクション型をして渡すことができます。

をあなたのケースでは、あなたは、単に>リスト<を使用することができますカスタムコレクションを作成する必要があります。