Publicité
+ Répondre à la discussion
Page 1 sur 2 12 DernièreDernière
Affichage des résultats 1 à 20 sur 23
  1. #1
    Expert Confirmé

    Homme Profil pro Eric Metz
    Développeur informatique
    Inscrit en
    avril 2006
    Messages
    924
    Détails du profil
    Informations personnelles :
    Nom : Homme Eric Metz
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : avril 2006
    Messages : 924
    Points : 3 246
    Points
    3 246

    Par défaut Classes et méthodes Abstract

    C'est assez rare quand je dois utiliser ce type de classe mais ici cela m'arrangerais bien dans la librairie que je voudrais écrire.

    Pour situer le problème, je voudrais écrire une librairie qui contient un objet connexion qui en fonction d'un paramètre attaque la bonne DB. Style si je lui dis de ce connecter à Access, ben ok et avec un autre objet du même type me vla partis sur Oracle.

    Pour ce faire j'utilise la classe System.Data.Common.DbConnection que je dérive pour créer les différents constructeurs dont j'ai besoin.

    Cette classe est une classe abstraire, donc je dois écrire le code toutes les fonctions et propriétés déclarées dans cette classe comme étant également abstraites.

    Pour le constructeur cela me donne un truc du genre :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    public EmDbConnection2(EmDbTypeConnection pTypeConnection, string sFilename)
                    : base()
                {
                    TypeConnection = pTypeConnection;
     
                    if (TypeConnection == EmDbTypeConnection.DBACCESS || TypeConnection == EmDbTypeConnection.DBSQLITE)
                        FileName = sFilename;
                }
    Ce qui m'a fois n'est pas bien compliqué. EmDbTypeConnection représentant une enum contenant les différents types de Db auquel je voudrais pouvoir me connecter.

    ou j'ai un peu plus de mal à comprendre comment je pourrais m'en sortir malgré les différents tuto que j'ai parcouru, c'est dans ce cas ci :

    J'obtiens une liste d'erreur du même type que celle ci, ce qui est normal vu que ce sont des membres déclarés comme abstract et donc que je suis cencé implémenter :

    'EmData.EmDbConnection2' n'implémente pas le membre abstract hérité 'System.Data.Common.DbConnection.BeginDbTransaction(System.Data.IsolationLevel)' D:\Dropbox\Développements\EmData\EmDbConnection2.cs 20 18 EmData

    Mon problème se situe donc à ce niveau ou je voudrais donc implémenté cette propriété:

    Code :
    public abstract string ConnectionString
    Donc je me dis je vais utilisé le mot cle override et utilisé le mot clé base pour accédé à la propriété ConnectionString de la classe de base.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
     
    public override string ConnectionString
    {
       get
       {
           return base.ConnectionString;
       }
    }
    Dans ce cas ci je ne vois pas la propriété ConnectionString dans la liste proposé par le mot clé "Base". Je me demande donc si je dois utiliser le mot clé "this" à sa place.

    J'ai déjà joué avec tout cela et je dois avoué qu'après 2 ou ans je patauge un peu au redémarrage.

    La solution que j'ai trouvé" jusqu'a présent pour utiliser ma classe c'est un truc du style :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Class Toto
    {
           DbConnection cmd = null; 
     
           public void Open()
          {
                 // Init de l'objet con avec les différents paramètres nécessaires   
                 // puis l'appel de la fonction membre de ma nouvelle classe : 
                 cmd .Open(); ... // Avec Try catch etc 
          }
    }
    Donc en gros réécrire toute la classe en la surclassant, ce que je ne trouve pas trop propre.En sachant que j'ai également besoin des classes DbTransact, DbReader, DBadapter , etc ....

    Quelqu'un pourrait il rallumé ma lanterne SVP

  2. #2
    Modérateur
    Avatar de Pongten
    Homme Profil pro Rémy Mainil
    IT Analyst & Software Developer
    Inscrit en
    juin 2002
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Nom : Homme Rémy Mainil
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Analyst & Software Developer
    Secteur : Communication - Médias

    Informations forums :
    Inscription : juin 2002
    Messages : 1 146
    Points : 3 008
    Points
    3 008

    Par défaut

    Bonjour,

    En fait, je pense que ce que tu t'y prends mal pour ce que tu cherches à faire...

    Je pense que plutôt que chercher à dériver la classe DBConnection, tu devrais faire en sorte que ta classe retourne un objet DBConnection dont c'est l'utilité première.

    Exemple :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    public DBConnection CreateConnection(TypeConnection typeConnection)
    {
        DbProviderFactories factory = null;
     
        switch(typeConnection)
        {
            case SqlServer:
                  factory = DbProviderFactories.GetFactory("System.Data.SqlClient");
                  return factory.CreateConnection();     
            case ....
        }
    }
    L'intérêt que DbConnection soit de type abstract sera justement de masquer le type concret qui est derrière...
    Si ton problème a une solution, rien ne sert de t'inquiéter..
    Si il n'en a pas, t'inquiéter ne sert à rien


  3. #3
    Expert Confirmé

    Homme Profil pro Eric Metz
    Développeur informatique
    Inscrit en
    avril 2006
    Messages
    924
    Détails du profil
    Informations personnelles :
    Nom : Homme Eric Metz
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : avril 2006
    Messages : 924
    Points : 3 246
    Points
    3 246

    Par défaut

    En fait tu vas dans le sens de ma réflexion.

    En effet ma classe connexion fait ce que tu dis la.

    Mais je pense que j'ai voulu aller trop loin en essayant de réécrire toutes les classes (donc DBReader, DbAdapter, DbCommand) alors que finalement il suffisait que j'utilise ces classes dans mes applications principales, mais juste en passant par une classe dérivée pour DBConnexion.

  4. #4
    Membre Expert

    Homme Profil pro John Doe
    Développeur .NET
    Inscrit en
    novembre 2010
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Nom : Homme John Doe
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : novembre 2010
    Messages : 1 298
    Points : 2 306
    Points
    2 306

    Par défaut

    Bonjour,
    tu n'es pas obligé de tout rendre abstrait, si tu veux pouvoir surchargé des éléments de ta classe de base tu peux utiliser virtual (le faite d'utiliser abstract t'empêchera d'y accéder depuis une classe qui en hérite étant donné qu'elle n'est pas sensé avoir été implémenté dans la classe mère).

    Donc dans ta classe de base utilise:
    Code :
     public virtual string ConnectionString { get; set; }
    Comme ça tu pourras y accéder depuis les classes qui en héritent et tu pourras la surcharger au besoin.

  5. #5
    Expert Confirmé

    Homme Profil pro Eric Metz
    Développeur informatique
    Inscrit en
    avril 2006
    Messages
    924
    Détails du profil
    Informations personnelles :
    Nom : Homme Eric Metz
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : avril 2006
    Messages : 924
    Points : 3 246
    Points
    3 246

    Par défaut

    Bonjour,

    Tout à fait d'accord, mon plus gros problème est que la classe DbConnexion fait partie du Framework donc je ne l'ai pas créée. Ce qui m’intéressait à la base c'est de pas me retapé les ProviderFactory dans toutes mes applications.

    L'erreur que j'ai faite et d'avoir voulu réécrire (en dérivant) les autres objets du style DbCommand etc etc ...

  6. #6
    Membre Expert

    Homme Profil pro John Doe
    Développeur .NET
    Inscrit en
    novembre 2010
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Nom : Homme John Doe
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : novembre 2010
    Messages : 1 298
    Points : 2 306
    Points
    2 306

    Par défaut

    tu peux faire un peu comme j'ai fais pour initialiser mon contexte EnttityFramework sur mon appli avec une connection string passée en paramètre

    Classe de base:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     public abstract class Repository
        {
            private crazyEntities context;
            public crazyEntities Context
            {
                get
                {
                    return context;
                }
     
            }
     
            public Repository(string connectionString)
            {
                context = new crazyEntities(connectionString);
            }
     
        }
    Classe qui en hérite:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
            public LogGSRepository(string connectionString)
                : base(connectionString)
            {
            }
     
            public bool ExistePourCetteDate(DateTime date)
            {
                return Context.GS.Any(g => g.DateGS == date);
            }
     
            public GS LireParDate(DateTime date)
            {
                return Context.GS.Where(g => g.DateGS == date).SingleOrDefault();
            }
     
            public List<DateTime> ObtenirDateLogGS()
            {
                return Context.GS.OrderByDescending(d => d.DateGS).Select(g => g.DateGS).ToList();
            }
     
            public void EcrireLogGS(GS gs)
            {
                Context.AddToGS(gs);
                Context.SaveChanges();
            }
        }
    j'ai ma classe mère qui s'occupe d'initialiser mon contexte et je l'utilise directement dans les classes filles, après tu peux ajouter tout le code de gestion des erreurs.

  7. #7
    Membre émérite Avatar de worm83
    Homme Profil pro worm
    Consultant .Net
    Inscrit en
    février 2010
    Messages
    408
    Détails du profil
    Informations personnelles :
    Nom : Homme worm
    Âge : 32
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant .Net
    Secteur : Conseil

    Informations forums :
    Inscription : février 2010
    Messages : 408
    Points : 889
    Points
    889

    Par défaut

    Bonjour,

    Je crois que tu fait une erreur sur les classes abstraite, elle doivent contenir au MINIMUM une méthode abstraite....

    Concernant le this ou base, je te conseil la lecture du modificateur "virtual" http://msdn.microsoft.com/fr-fr/libr...=vs.80%29.aspx

    Ensuite pour te faciliter la tache concernant l'instanciation de telle ou telle implémentation un petit tour du coté du design pattern "abstract Factorie" devrait t'aider
    En francais

    Cordialement
    "Le train de tes injures roule sur le rail de mon indifférence."

    "Monde de merde !!"

    Georges Abitbol.

  8. #8
    Inactif
    Homme Profil pro François
    Chef de projet NTIC
    Inscrit en
    janvier 2007
    Messages
    6 608
    Détails du profil
    Informations personnelles :
    Nom : Homme François
    Âge : 53
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : janvier 2007
    Messages : 6 608
    Points : 13 112
    Points
    13 112

    Par défaut

    Citation Envoyé par binou76 Voir le message
    C'est assez rare quand je dois utiliser ce type de classe mais ici cela m'arrangerais bien dans la librairie que je voudrais écrire.

    Pour situer le problème, je voudrais écrire une librairie qui contient un objet connexion qui en fonction d'un paramètre attaque la bonne DB. Style si je lui dis de ce connecter à Access, ben ok et avec un autre objet du même type me vla partis sur Oracle.
    Il y a l'implémentation du DP Factory de connexion de ADO.Net qui fait ça très bien. Tu es sur que tu ne réinventes pas l'eau tiède ?

  9. #9
    Inactif
    Homme Profil pro François
    Chef de projet NTIC
    Inscrit en
    janvier 2007
    Messages
    6 608
    Détails du profil
    Informations personnelles :
    Nom : Homme François
    Âge : 53
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : janvier 2007
    Messages : 6 608
    Points : 13 112
    Points
    13 112

    Par défaut

    Bonjour

    Citation Envoyé par worm83 Voir le message
    Je crois que tu fait une erreur sur les classes abstraite, elle doivent contenir au MINIMUM une méthode abstraite....
    C'est faux; ce n'est absolument pas nécessaire.

    C'est l'inverse : seules les classes abstraites peuvent contenir des méthodes abstraites.

    Mais une classe peut parfaitement être abstraite sans contenir de méthodes abstraites; le fait qu'une classe soit abstraitre indique seulement qu'elle ne peut pas être instanciée et ne sert quà être héritée.

  10. #10
    Membre émérite Avatar de worm83
    Homme Profil pro worm
    Consultant .Net
    Inscrit en
    février 2010
    Messages
    408
    Détails du profil
    Informations personnelles :
    Nom : Homme worm
    Âge : 32
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant .Net
    Secteur : Conseil

    Informations forums :
    Inscription : février 2010
    Messages : 408
    Points : 889
    Points
    889

    Par défaut

    Citation Envoyé par Bluedeep Voir le message
    Bonjour



    C'est faux; ce n'est absolument pas nécessaire.

    C'est l'inverse : seules les classes abstraites peuvent contenir des méthodes abstraites.

    Mais une classe peut parfaitement être abstraite sans contenir de méthodes abstraites; le fait qu'une classe soit abstraitre indique seulement qu'elle ne peut pas être instanciée et ne sert quà être héritée.
    Effectivement ce que je dit n'est vrai qu'en JAVA.
    Effectivement ça compile en c#, mais bon au niveau design si je dérive d'une classe abstraite et que je n'ai aucune méthode à overrider je me pose des questions.....


    Toutefois il est inutile d'avoir toute les méthodes abstraite contrairement a ce que faisait penser la question initiale.
    "Le train de tes injures roule sur le rail de mon indifférence."

    "Monde de merde !!"

    Georges Abitbol.

  11. #11
    Membre émérite Avatar de worm83
    Homme Profil pro worm
    Consultant .Net
    Inscrit en
    février 2010
    Messages
    408
    Détails du profil
    Informations personnelles :
    Nom : Homme worm
    Âge : 32
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant .Net
    Secteur : Conseil

    Informations forums :
    Inscription : février 2010
    Messages : 408
    Points : 889
    Points
    889

    Par défaut

    Je viens de regarder plusieurs sources, et la définition d'une classe abstraite est en général une classe partiellement définie possédant au moins une méthode abstraite (ou méthode virtuelle pure).

    Dans beaucoup de langage (dont JAVA) une classe définie comme abstract mais sans méthode abstraite ne compile pas, c# étant multiparadigme et ayant une implémentation privilégiant la performance plutôt que le design (par exemple le mot clé virtual obligatoire en c# pour avoir une méthode virtuel et éviter de se coltiner une vtable a chaque appel) j'aurais du me douter que ceci était possible XD.
    "Le train de tes injures roule sur le rail de mon indifférence."

    "Monde de merde !!"

    Georges Abitbol.

  12. #12
    Inactif
    Homme Profil pro François
    Chef de projet NTIC
    Inscrit en
    janvier 2007
    Messages
    6 608
    Détails du profil
    Informations personnelles :
    Nom : Homme François
    Âge : 53
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : janvier 2007
    Messages : 6 608
    Points : 13 112
    Points
    13 112

    Par défaut

    Citation Envoyé par worm83 Voir le message
    Je viens de regarder plusieurs sources, et la définition d'une classe abstraite est en général une classe partiellement définie possédant au moins une méthode abstraite (ou méthode virtuelle pure).
    C'est la définition qu'on trouve dans wikipedia (et un définition avec un "en général " n'est pas vraiment une définition); or l'article est un peu sujet à caution car plus loin on lit :

    Une classe ne possédant que des méthodes abstraites est appelée interface
    Ce qui est réducteur dans la mesure où on peut avoir une classe abstraite avec que des méthodes abstraites mais des variables membres en plus et, dans ce cas, une telle classe ne peut être substituée par une interface.

    Bref, l'article est un peu flou, au moins dans ces énoncés.

  13. #13
    Membre émérite Avatar de worm83
    Homme Profil pro worm
    Consultant .Net
    Inscrit en
    février 2010
    Messages
    408
    Détails du profil
    Informations personnelles :
    Nom : Homme worm
    Âge : 32
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant .Net
    Secteur : Conseil

    Informations forums :
    Inscription : février 2010
    Messages : 408
    Points : 889
    Points
    889

    Par défaut

    je ne parle pas que de Wikipedia, bien au contraire c'est même la dernière source que j'ai consulté, la seule qui différencie c'est la msdn, mais elle parle de l'implémentation spécifique de c# donc c'est normal.
    Et effectivement une classe non instanciable, et, dont les méthodes ne sont pas définie est ...... une interface ( car une interface peut aussi avoir des propriétés ect).

    Bien sure Blue Deep on ne parle que de design Poo et non de fonctionnalité. Car une classe abstraite peut avoir effectivement des membres, mais a quoi sert une classe qu'on ne peut instancié avec des membres auquel on ne peut accéder .... à rien, si ce n'est d'interface.

    Ensuite ce qui fait le choix entre une classe abstraite et une interface et le choix entre la notion d'héritage ou la notion de service.
    "Le train de tes injures roule sur le rail de mon indifférence."

    "Monde de merde !!"

    Georges Abitbol.

  14. #14
    Inactif
    Homme Profil pro François
    Chef de projet NTIC
    Inscrit en
    janvier 2007
    Messages
    6 608
    Détails du profil
    Informations personnelles :
    Nom : Homme François
    Âge : 53
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : janvier 2007
    Messages : 6 608
    Points : 13 112
    Points
    13 112

    Par défaut

    Citation Envoyé par worm83 Voir le message
    . Car une classe abstraite peut avoir effectivement des membres, mais a quoi sert une classe qu'on ne peut instancié avec des membres auquel on ne peut accéder .... à rien, si ce n'est d'interface.
    Rien n'empêche d'accéder aux membres d'une classe abstraite. Ce qui ne servirait à rien, c'est une classe abstraite avec uniquement des méthodes abstraites et des membres privés (pourtant, ça compile, mais bon ....).

  15. #15
    Membre émérite Avatar de worm83
    Homme Profil pro worm
    Consultant .Net
    Inscrit en
    février 2010
    Messages
    408
    Détails du profil
    Informations personnelles :
    Nom : Homme worm
    Âge : 32
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant .Net
    Secteur : Conseil

    Informations forums :
    Inscription : février 2010
    Messages : 408
    Points : 889
    Points
    889

    Par défaut

    Citation Envoyé par Bluedeep Voir le message
    Rien n'empêche d'accéder aux membres d'une classe abstraite. Ce qui ne servirait à rien, c'est une classe abstraite avec uniquement des méthodes abstraites et des membres privés (pourtant, ça compile, mais bon ....).
    Alors OK,vu comme ca c'est vrai tu as raison.
    Mais alors la mon cher BlueDeep tu ne pourra pas me dire que c'est "propre", on peut le faire, mais doit on le faire ?
    Et l'ENCAPSULATION ??????
    "Le train de tes injures roule sur le rail de mon indifférence."

    "Monde de merde !!"

    Georges Abitbol.

  16. #16
    Inactif
    Homme Profil pro François
    Chef de projet NTIC
    Inscrit en
    janvier 2007
    Messages
    6 608
    Détails du profil
    Informations personnelles :
    Nom : Homme François
    Âge : 53
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : janvier 2007
    Messages : 6 608
    Points : 13 112
    Points
    13 112

    Par défaut

    Citation Envoyé par worm83 Voir le message
    Alors OK,vu comme ca c'est vrai tu as raison, mais alors la mon cher BlueDeep tu ne pourra pas me dire que c'est "propre", on peut le faire mais doit on le faire ?
    Et l'ENCAPSULATION ??????
    Je ne vois pas ce que l'encapsulation vient faire ici.
    Un membre protected dans une classe abstraite est tout à fait légitime.

  17. #17
    Membre émérite Avatar de worm83
    Homme Profil pro worm
    Consultant .Net
    Inscrit en
    février 2010
    Messages
    408
    Détails du profil
    Informations personnelles :
    Nom : Homme worm
    Âge : 32
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant .Net
    Secteur : Conseil

    Informations forums :
    Inscription : février 2010
    Messages : 408
    Points : 889
    Points
    889

    Par défaut

    Citation Envoyé par Bluedeep Voir le message
    Je ne vois pas ce que l'encapsulation vient faire ici.
    Un membre protected dans une classe abstraite est tout à fait légitime.
    Je parlais d'encapsulation car en général on préfère exposer une propriété ou une méthode d’accès (quand pas propriété) plutôt que le membre en lui même. D'ailleurs existe t'il une seule classe dans le Framework .Net qui expose un membre plutôt qu'une propriété (par exemple) ?


    On peut le faire ok, il y a peut être des cas concret ou ce design est utile (si t'as des exemple), et c'est d'ailleur un design qui est certe possible en c# (qui est moins rigide que JAVA par exemple) mais qui sera réimplanté dans d'autre langages sous la forme abstract class (avec au moins une méthode abstraite) ou une Interface.

    http://design-patterns.fr/introducti...orientee-objet
    "Le train de tes injures roule sur le rail de mon indifférence."

    "Monde de merde !!"

    Georges Abitbol.

  18. #18
    Inactif
    Homme Profil pro François
    Chef de projet NTIC
    Inscrit en
    janvier 2007
    Messages
    6 608
    Détails du profil
    Informations personnelles :
    Nom : Homme François
    Âge : 53
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : janvier 2007
    Messages : 6 608
    Points : 13 112
    Points
    13 112

    Par défaut

    Citation Envoyé par worm83 Voir le message
    Je parlais d'encapsulation car en général on préfère exposer une propriété ou une méthode d’accès (quand pas propriété)plutôt que le membre en lui même.
    Ce qui tout à fait logique pour un accès "par le monde extérieur" mais pas une contrainte justifiée pour un accès par les classes dérivées.

    D'ailleurs existe t'il une seule classe dans le Framework .Net qui expose un membre plutôt qu'une propriété (par exemple) ?
    Dans les classe dérivées de EventArg, tu dois trouver des membres readonly publiques, mais de toute façon , je n'ai pas parlé de membre publiques.


    On peut le faire ok, il y a peut être des cas concret ou ce design est utile (si t'as des exemple),
    En voici un que j'ai sous la main un peu par hasard, piqués dans un projet dont j'ai piloté le dév il y a 5 ou 6 ans chez ce même client où je suis à l'instant; il s'agit d'un ensemble de classe controller en client lourd, avec un DP assez semblable à un MVC.

    En haut, tu as un ensemble de classes abstraites; ici par exemple, une classe controller abstraites pour des controleurs manipulant des listes d'objets. On a des membres protected commun à toutes les classes dérivées, et des membres publics mais qui sont uniquement des events. Pas mal de code implémenté sur des méthodes virtuelles.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    	public abstract  class ListControlBaseController<TObject, TControl> : IListControl<TObject>, IDisposable
    		where TObject : class, new()	
    		where TControl : Control	
    	{
    		#region Events Declaration
     
    		public event EventHandler<ControlObjectEventArgs<TObject>> SelectedObjectChanged;
    		public event EventHandler<ControlObjectCancelEventArgs<TObject>> DeleteRequested;
    		public event EventHandler<ControlObjectEventArgs<TObject>> UpdateRequested;
    		public event EventHandler RefreshRequested;
    		public event EventHandler NewRequested;
     
    		public event EventHandler DoubleClick;
     
    		#endregion
     
    		protected bool _allowDelete = true;
    		protected bool _allowNew = true;
    		protected bool _allowUpdate = true;
    		protected bool _allowExport = true;
    		protected bool _allowRefreshRequest = false;
     
     
    		protected readonly TControl _control;
    		protected TObject _selectedObject;
    		protected IList<TObject> _objects = new List<TObject>(); 
     
    /* ET DU CODE */

    De là des classes dérivées; exemples :

    Controleur de ListView :

    Code :
    1
    2
    	public partial class ListViewController<TObject> : ListControlBaseController<TObject, ListView> 
    		where TObject : class, new()
    Controleur de DataGridView :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    	public class DataGridViewController<TObject> : ListControlBaseController<TObject, DataGridView>, IDisposable where TObject : class, new() 
    	{
    		#region Events Declaration
     
    		public event EventHandler<ControlObjectEventArgs<TObject>> ObjectRemoved;
    		public event EventHandler<ControlObjectEventArgs<TObject>> ObjectAdded;
     
    		#endregion

  19. #19
    Membre émérite Avatar de worm83
    Homme Profil pro worm
    Consultant .Net
    Inscrit en
    février 2010
    Messages
    408
    Détails du profil
    Informations personnelles :
    Nom : Homme worm
    Âge : 32
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant .Net
    Secteur : Conseil

    Informations forums :
    Inscription : février 2010
    Messages : 408
    Points : 889
    Points
    889

    Par défaut

    Ok merci pour l'exemple, mais du coup, dans ton cas quelle différence avec un constructeur en protected ?

    (Effectivement les membres public readonly sont un cas à part)

    Edit : Âpres relecture la question est "brute", mais n'est-ce pas l'utilité du constructeur protégé ?
    "Le train de tes injures roule sur le rail de mon indifférence."

    "Monde de merde !!"

    Georges Abitbol.

  20. #20
    Membre Expert

    Homme Profil pro John Doe
    Développeur .NET
    Inscrit en
    novembre 2010
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Nom : Homme John Doe
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : novembre 2010
    Messages : 1 298
    Points : 2 306
    Points
    2 306

    Par défaut

    Est-ce que ceci est la bonne méthode pour ma classe repository comme on est sur le débat du abstract et des membres protected ...
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    public abstract class Repository
        {
            protected crazyEntities ctx;
     
            public Repository(string connectionString)
            {
                ctx = new crazyEntities(connectionString);
            }
     
            public Repository()
            {
                ctx = new crazyEntities();
            }
     
        }

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •