Question

Voilà, j'ai une application qui doit attacher et détacher régulièrement plusieurs bases de données SQL.Je souhaite créer une classe contenant toutes ces bases de données sous la forme d'une collection pouvant être itérée.Pour ce faire, j'hérite de ICollection, mais il y a certaines réflexions que je ne comprends pas :

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;
    }
}

Ma question est "pourquoi hériter de ICollection du tout, lorsque vous devez ajouter des méthodes telles que « Ajouter », « Contient », etc.toi-même?Ou devez-vous le faire vous-même comme suggéré dans MSDN?J'ai lu "C# in a Nutshell" et cette question est quelque chose qui ressort sans réponse dans ce grand livre.

Je m'excuse, je sais qu'il me manque quelque chose ici...

Était-ce utile?

La solution

Ma question est "pourquoi hériter d'ICollection, quand vous devez ajouter des méthodes telles que 'Ajouter', 'Contient', etc.toi-même?

ICollection<T> est un interface - il précise simplement les membres que vous devez implémenter.Si vous voulez dériver de quelque chose qui déjà a une implémentation, regardez Collection<T>.Vous implémenteriez l'interface vous-même si vous souhaitiez créer votre propre structure de données de collection avec ses propres caractéristiques particulières - je doute que vous souhaitiez le faire.

Pour être honnête, on ne sait pas du tout pourquoi vous voulez votre propre cours ici - pourquoi ne pas simplement utiliser List<SqlDb> dans le code client directement ?

Autres conseils

Avez-vous pensé à utiliser List<SqlDb> directement?

Ce que vous espérez gagner avec la classe SqlDataBases n'est pas évident pour moi.

Si vous ne pouvez pas utiliser List<SqlDb> directement, pensez à hériter de List<SqlDb> plutôt que ICollection<SqlDb>.

Les interfaces ne sont que des squelettes.Ils ne contiennent aucune logique, ils contiennent uniquement les signatures de toutes les méthodes, propriétés, etc.

Interfaces

La raison d'hériter de ICollection<> est de créer votre propre type de collection personnalisé.Ensuite, partout où une méthode a une variable d’entrée ICollection<>, parce que vous avez hérité de ICollection<>, votre nouveau type de collection personnalisée peut être transmis.

Dans votre cas, vous pouvez simplement utiliser List<> jusqu'à ce que vous ayez besoin de créer une collection personnalisée.

Répondre "pourquoi hériter d'ICollection, quand vous devez ajouter des méthodes telles que 'Add'":

vous n'avez pas besoin d'hériter d'ICollection si vous n'avez pas besoin/ne voulez pas avoir Add/Next, etc.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top