IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

création objet global - dans "Program" -> static public


Sujet :

C#

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 22
    Points : 23
    Points
    23
    Par défaut création objet global - dans "Program" -> static public
    Bonjour,

    Qu'est qui est préférable entre une déclaration global pour un objet utilisé par plusieurs et une transmission de adresses entre objet.

    Ceci d'un point de vu :
    sécurité du code
    rapidité du programme
    utilisation de thead

    Cas 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    static class Program
        {
            static public class ObjetCommun = new class();
            ...
        }
     
    class Class1
    {
         public vois func()
         {
             Program.ObjetCommun.func1();
         }
    }
    class Class2
    {
         public vois func()
         {
             Program.ObjetCommun.func1();
         }
    }
    Cas 2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    29
     
    class Class1
    {
         private class _ObjetCommun;
     
         public Class1(class ObjetCommun)
         {
              _ObjetCommun = ObjetCommun;
         }
     
         public vois func()
         {
             _ObjetCommun.func1();
         }
    }
    class Class2
    {
         private class _ObjetCommun;
     
         public Class2(class ObjetCommun)
         {
              _ObjetCommun = ObjetCommun;
         }
     
         public vois func()
         {
             _ObjetCommun.func1();
         }
    }

    merci pur vos réponses.

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    les différences sont minimes, donc j'opterais pour le "tu choisis ce que tu préfères", surtout en fonction de la syntaxe donc
    sur un petit programme j'opterais plus sur le static, pour quelque chose de plus gros ou qui nécessiterait de l'évolutivité la 2ème serait peut être préférable

    sécurité du code => c'est à dire ? (si c'est la propreté je pense que c'est subjectif)
    rapidité du programme => tu es vraiment à la nanoseconde près ?
    utilisation de thead => je ne vois pas le rapport
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 896
    Points : 1 912
    Points
    1 912
    Par défaut
    Personnellement j'ai maintenant une préférence pour la deuxième solution, qui a un modèle injection de dépendance et permet de mettre plus facilement en place des test unitaires. Mais rien ne t'empêche d'opter pour un compromis avec un constructeur paramétré ; par ailleurs je ne mettrais pas la référence static directement dans la classe Program par défaut du template de projet mais plutôt dans une classe dédiée à part que tu pourras extraire de l'assembly.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    // Interface
    public interface IContext { void DoSomething(); }
     
    // Implémentation
    public class Context:IContext{  public void DoSomething() { Console.WriteLine("Hello World!"); }
     
    // Classe fournisseur global
    public class Provider
    {
      public static IContext Context { get; set; }
    }
     
    // Un utilisateur
    public class Class1
    {
      private IContext _context();
      public Class1(IContext context) { _context = context; }
      public Class1():this(Provider.Context);
      public void CallSomething() { _context.DoSomething(); }
    }
     
    // Le programme
    class Program
    {
      static void Main(string[] args)
      {
        Provider.Context = new Context();
        Class1 obj1 = new Class1();
        obj1.CallSomething();
      }
    }
     
    // Implémentation de IContext pour les tests
    public class TestContext:IContext
    {
      int CallCount { get; private set; }
      public void DoSomething() { CallCount++; }
    }
     
    // Classe de test
    [TestFixture]
    public class TestClass1
    {
      [Test]
      public void TestCallSomething()
      {
        IContext context = new TestContext();
        Class1 obj1 = new Class1(context);
        obj1.CallSomething();
        Assert.IsTrue(context.CallCount > 0);
      }
    }
    On ne gère pas les Thread ici, mais on peut créer une classe de proxy pour protéger les appels.

Discussions similaires

  1. [Toutes versions] La methode range de l'objet global à échoué macro dans un userform
    Par diude54 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 25/02/2013, 11h38
  2. Création objet dynamique dans une boucle. [Correction de code]
    Par Rifton007 dans le forum ActionScript 3
    Réponses: 6
    Dernier message: 04/04/2011, 23h48
  3. Création rdv dans outlook. Dossier publics
    Par laurent.mario dans le forum VBA Outlook
    Réponses: 1
    Dernier message: 29/04/2009, 12h24
  4. Pb d'objet requis dans création automatique de macros
    Par vally74 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 18/05/2008, 11h57
  5. validite d'une static global dans une classe
    Par kacedda dans le forum C++
    Réponses: 24
    Dernier message: 06/01/2008, 13h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo