ASP Net Core MVC: Wie kann ich auf das Ergebnis von einer anderen Klasse zugreifen?

1 Antwort

Klasse 2 sollte eine Referenz auf Klasse 1 bekommen. Die Übergabe kann an verschiedenen Stellen erfolgen, wie das folgende Beispiel zeigt.

class Calculator
{
  public int GetSum(int number1, int number2) => number1 + number2;
}

class User
{
  private Calculator _calculator;

  // option 1: create on user object initialization
  public User()
  {
    _calculator = new Calculator();
  }

  // option 2: pass on user object initialization
  public User(Calculator calculator)
  {
    _calculator = calculator;
  }

  public void computeSomething()
  {
    int sum = _calculator.GetSum(3, 7);
    // ...
  }

  // option 3: pass on method invocation
  public void computeSomething(Calculator calculator)
  {
    int sum = calculator.GetSum(3, 7);
    // ...
  }
}

a) Die User-Klasse könnte sich ihr eigenes Calculator-Objekt erzeugen. Im obigen Fall findet das im (parameterlosen) Konstruktor statt (Option 1) und die Referenz wird in einem Feld gespeichert. Man könnte das Objekt ebenso für den Einmalgebrauch in der computeSomething-Methode kreieren.

Was mehr Sinn ergibt, leitet sich davon ab, wie oft das Calculator-Objekt vom User-Objekt gebraucht wird. Wenn es beispielsweise in mehreren unterschiedlichen Methoden Anwendung findet, ist es sinnvoll, initial mit einem Feld auf das Calculator-Objekt zu verweisen, statt es für jede Anwendung erneut anlegen zu müssen.

b) Die User-Klasse könnte eine Referenz auf das Calculator-Objekt via Parameter überreicht bekommen. Das Beispiel zeigt erneut zwei mögliche Wege: Entweder via Konstruktor (Option 2) oder Methode (Option 3). Noch ein dritter Weg wäre ein Property. Welcher mehr Sinn macht, ergibt sich erneut aus dem individuellen Kontext. In jedem Fall müsste das Calculator-Objekt außerhalb der Klasse kreiert werden.

Beispiel:

Calculator calculator = new Calculator();
User user = new User();
user.ComputeSomething(calculator);

OtakuMiki 
Fragesteller
 15.11.2023, 21:41

Vielen Dank ich werde es mal morgen versuchen umzusetzen

0