web-dev-qa-db-fra.com

Création d'une classe d'utilitaires?

Je suis très nouveau dans le domaineOOP et je fais de mon mieux pour que les choses restent strictement basées sur les classes, tout en appliquant de bons principes de codage.

Je suis un peu dans mon projet maintenant et j'ai beaucoup de méthodes d'utilisation générale que je veux mettre dans une classe d'utilitaires. Existe-t-il un meilleur moyen de créer une classe d’utilitaires?

public class Utilities
{
    int test;

    public Utilities()
    {
    }

    public int sum(int number1, int number2)
    {
        test = number1 + number2;
    }
    return test;
}

Après avoir créé cette classe Utilities, dois-je simplement créer un objet Utilities et exécuter les méthodes de mon choix? Est-ce que cette idée de classe Utilitaires est correcte?

20
sooprise

Vous devriez en faire une classe static, comme ceci:

public static class Utilities {
    public static int Sum(int number1, int number2) {
        return number1 + number2;
    }
}

int three = Utilities.Sum(1, 2);

La classe ne devrait (généralement) pas avoir de champs ou de propriétés. (Sauf si vous souhaitez partager une seule instance d'un objet avec votre code, vous pouvez créer une propriété static en lecture seule.

37
SLaks

Si vous travaillez avec .NET 3.0 ou une version ultérieure, vous devez examiner les méthodes d’extension. Ils vous permettent d'écrire une fonction static qui agira contre un type particulier, tel que Int32, tout en semblant être une méthode on cet objet. Ainsi, vous pourriez avoir: int result = 1.Add(2);.

Essayez ceci cela pourrait simplement vous montrer une autre façon. ;)

Tutoriel C # - Méthodes d'extension

11
Lance

Vous ferez mieux d'utiliser une classe static avec des méthodes static. Vous n'aurez alors pas besoin d'instancier votre classe d'utilitaires pour l'utiliser. Cela ressemblera à ceci:

public static Utilites
{
  public static int sum(int number1, int number2)
  {
     test = number1+number2;
     return test;
  }
}

Ensuite, vous pouvez l'utiliser comme ceci:

int result = Utilites.sum(1, 3);
2
Jason Webb

Le mieux est de rendre les fonctions non fiables pour les membres d'une classe. Par conséquent, vous pouvez rendre les fonctions statiques.

Mieux vaut faire des fonctions une méthode d’extension d’un type. voir ici par exemple

1
RvdK

Bien que novice pour OOP et pour essayer de maîtriser les meilleures pratiques, il peut être judicieux d'essayer d'éviter les classes d'utilitaires. Vous pouvez refaire votre classe comme

public class Sum
{
    private int _result;

    public int Result {
       get {
           return _result;
       }
    }

    public Sum(int startNum) {
        _results = startNum;
    }

    public void Add(int num) {
        _result += num;
    }
}

Et s'appelle comme:

Sum sum = new Sum(1);
sum.add(2);
int result = sum.Result;

Ce sera une bonne pratique jusqu'à ce que de nouvelles expériences avec OOP puissent vous aider à examiner les compromis entre l'utilisation d'une classe d'utilitaires et les principes purs OOP.

1
tylermac

oui cela ne compile pas car int test qui n'est pas supporté à l'intérieur de la classe statique soit en faire un test int statique qui sera supporté et retournera le résultat

0
Pradeep Bellary