2012-03-01 99 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繼承可言,當你必須添加方法,如‘添加’,「包含'etc.你自己嗎?或者你必須自己按照MSDN中的建議自己去做?我一直在閱讀「C#in a Nutshell」,這個問題在這本書中很突出。我知道我在這裏失去了一些東西...

+0

我的想法是一樣的;爲什麼不在需要的地方使用'List '?它具有您嘗試實現的功能,只要我能看到。 – 2012-03-01 12:10:51

+1

@Killercam,下面的一條評論建議使用Dictionary <>。除非你想通過名稱反覆「查找」你的連接,否則Dictionary <>會更好,因爲你可以指定一個類似於數據庫名稱的鍵。 – 2012-03-01 12:33:25

+0

感謝您的幫助。 – MoonKnight 2012-03-01 13:36:44

回答

3

我的問題是「爲什麼從ICollection繼承,當你必須自己添加'Add','Contains'等方法時?

ICollection<T>接口 - 它只是規定你必須實現的成員。如果你想從已經有具有的東西派生出一個實現,請看Collection<T>。如果你想創建自己的具有特殊特徵的集合數據結構,你可以自己實現接口 - 我懷疑你是否想要這樣做。

說實話,目前還不清楚爲什麼你想要自己的班級 - 爲什麼不直接在客戶端代碼中使用List<SqlDb>

+0

感謝喬恩,這已經整理出我的愚蠢。你說得對,我只需要在這裏列出一個列表,但我之前並沒有創建自己的收藏課,並且幻想這樣做,但這是愚蠢的。謝謝你的時間。 – MoonKnight 2012-03-01 12:17:53

2

接口只是骨架。他們不包含,它們只包含所有方法,屬性等

Interfaces

3

你有沒有想過直接使用List<SqlDb>的簽名任何邏輯?

這對我來說不是很明顯,你希望通過SqlDataBases類獲得什麼。

如果您不能直接使用List<SqlDb>,請考慮繼承List<SqlDb>而不是ICollection<SqlDb>

+1

雖然...我會把它放到字典中,但是其原因尚不清楚 – b0rg 2012-03-01 12:20:57

1

回答「爲什麼自ICollection繼承可言,當你必須添加方法,如‘添加’」:

你不需要繼承ICollection的,如果你並不需要/想有添加/ Next等

2

繼承自ICollection <>的原因是創建您自己的自定義集合類型。然後,在任何地方的方法有ICollection的<>的輸入變量,因爲你自ICollection <>繼承,新的自定義集合類型可以被傳遞。

在你的情況,你可以簡單地使用列表<>直到你找到需要創建一個自定義集合。