所有,我有一个应用程序需要定期附加和分离多个SQL数据库。我想创建一个类,将所有这些数据库保存为可以迭代的集合。要做到这一点,我继承自 ICollection, ,但有一些thinkg我不明白:

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 在所有,当你必须添加方法,如'Add','Contains'等。你自己?或者你必须按照建议自己这样做吗 MSDN?我一直在阅读"C#简而言之",这个问题在这本伟大的书中没有得到解决。

我道歉,我知道我在这里错过了一些东西。..

有帮助吗?

解决方案

我的问题是"为什么要从ICollection继承,当你必须添加方法,如'Add','Contains'等。你自己?

ICollection<T> 是一个 界面 -它只是指定你必须实现的成员。如果你想从已经有的东西中派生出来 一个实现,看 Collection<T>.如果你想创建自己的具有自己特殊特征的集合数据结构,你会自己实现接口-我怀疑你想要这样做。

说实话,现在还不清楚为什么你想要自己的班级在这里-为什么不直接使用 List<SqlDb> 直接在客户端代码中?

其他提示

你有没有想过使用 List<SqlDb> 直接?

对我来说,你希望通过SqlDataBases类获得什么并不明显。

如果你不能使用 List<SqlDb> 直接,想想继承自 List<SqlDb> 而不是 ICollection<SqlDb>.

接口只是骨架。它们不包含任何逻辑,它们只包含所有方法,属性等的签名。

接口

继承自ICollection的原因<>是创建自己的自定义集合类型。然后,任何方法具有ICollection的输入变量的地方<>,因为你继承自ICollection<>,您的新自定义集合类型可以传入。

在你的情况下,你可以简单地使用List<>直到您发现需要创建自定义集合。

回答"当你必须添加诸如'Add'之类的方法时,为什么要从ICollection继承":

如果您不需要/想要添加/下一步等,则不需要继承ICollection。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top