webentwicklung-frage-antwort-db.com.de

Erstellen einer Dienstprogrammklasse?

Ich bin sehr neu in OOP und bemühe mich sehr, die Dinge streng klassenbasiert zu halten, während ich gute Codierungsprinzipien verwende.

Ich bin jetzt ein fairer Einstieg in mein Projekt und ich habe viele allgemeine Verwendungsmethoden, die ich in eine Versorgungsklasse einordnen möchte. Gibt es eine beste Möglichkeit, eine Dienstprogrammklasse zu erstellen?

public class Utilities
{
    int test;

    public Utilities()
    {
    }

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

Nachdem ich diese Utilities-Klasse erstellt habe, erstelle ich einfach ein Utilities-Objekt und führe die Methoden meiner Wahl aus? Habe ich die richtige Idee für diese Utilities-Klasse?

20
sooprise

Sie sollten es zu einer static-Klasse machen, wie folgt:

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

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

Die Klasse sollte (normalerweise) keine Felder oder Eigenschaften haben. (Es sei denn, Sie möchten eine einzelne Instanz eines Objekts im gesamten Code freigeben. In diesem Fall können Sie eine schreibgeschützte static-Eigenschaft erstellen.

37
SLaks

Wenn Sie mit .NET 3.0 oder höher arbeiten, sollten Sie die Erweiterungsmethoden untersuchen. Sie erlauben Ihnen, eine static-Funktion zu schreiben, die gegen einen bestimmten Typ wie Int32 wirkt, während es sich scheinbar um eine Methode on dieses Objekt handelt. Dann hätten Sie also: int result = 1.Add(2);.

Probieren Sie das aus; Es könnte Ihnen nur einen anderen Weg zeigen. ;)

C # -Tutorial - Erweiterungsmethoden

11
Lance

Es ist besser, eine static-Klasse mit static-Methoden zu verwenden. Dann müssen Sie Ihre Dienstprogrammklasse nicht instanziieren, um sie zu verwenden. Es wird ungefähr so ​​aussehen:

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

Dann kannst du es so benutzen:

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

Am besten ist es, die Funktionen für Mitglieder einer Klasse nicht zuverlässig zu machen. Daher können Sie die Funktionen statisch machen.

Besser ist es, die Funktionen zu einer Erweiterungsmethode eines Typs zu machen. siehe hier zum Beispiel

1
RvdK
  1. Erstellen Sie die Utility-Klasse als öffentliche statische Klasse.
  2. Definierte Utility-Funktionsmethode mit statischem Schlüsselwort

Methodenaufruf: -

int result = Utilities.sum (1, 2);

   public static class MyMath
         {
             int result;

             public static int sum(int number1, int number2)
             {
                 result= number1+number2;
                 return result;
             }
        }
1
Rahul

Obwohl es sich um OOP handelt und versucht wird, Best Practices in den Griff zu bekommen, kann es eine gute Idee sein, zu versuchen, Utility-Klassen zu vermeiden. Sie könnten Ihre Klasse gerne umgestalten

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

Und heißt wie:

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

Es ist eine gute Praxis, bis weitere Erfahrungen mit OOP Ihnen helfen können, die Kompromisse zwischen der Verwendung einer Utility-Klasse und den reinen OOP-Prinzipien zu untersuchen.

1
tylermac

ja, dies wird nicht kompiliert, da int test, der in der statischen Klasse nicht unterstützt wird, es auch als statischen int test macht, der unterstützt wird und die Ausgabe zurückgibt

0
Pradeep Bellary