Laden...

Was genau bedeutet: "Der bedingte Operator kann nicht überladen werden."?

Erstellt von mchrd vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.209 Views
M
mchrd Themenstarter:in
17 Beiträge seit 2018
vor 5 Jahren
Was genau bedeutet: "Der bedingte Operator kann nicht überladen werden."?

Hallo zusammen,

ich lerne zur Zeit C#. Jetzt habe ich auf dieser Microsoft-WebseiteSeite folgenden Satz zum tenär bedingten Operator gelesen:

Der bedingte Operator kann nicht überladen werden.

Was bedeutet dies?
Ich habe dann weitergeschaut um es selbst herauszufinden und bin auf den Microsoftseiten noch auf overloadable-operators und operator gekommen. Leider halfen mir beide Webseiten nicht.

Ich kenne überladen bisher nur als Begriff, dass man einer Methode etwas überlädt (also z. B. Werte mitgibt).

Könnt ihr mir ggf. ein Beispiel geben und erklären was man darunter verstehen soll?

Danke!

T
2.219 Beiträge seit 2008
vor 5 Jahren

Steht doch bei deinem Link zum Thema operatoren dabei.
Du kannst in deiner Klasse bestimmte Operatoren überladen um bestimmte Funktionen damit abzubilden.
So kannst du eben wie bei String aus zwei Instanzen mit dem + Opertor eine dritte Instanz bilden.
Dabei werden die internen Werte der beiden Instanzen zusammengefügt.

In .NET gibt es einige Beispiele für Operatoren Überladungen.
Z.b. die BigInteger Klasse zum abbilden von großen Zahlen nutzt dies ebenfalls um darüber die Instanzen entsprechend zu berechnen.

Ist für den Anfang aber noch ein zu großes Thema, lern lieber erst einmal Allgemeines über C# und OOP.
Später kommt das Thema von allein noch dazu bei den fortgeschrittenen Themen.
Die meisten Lehrbücher greifen dann auch gern wieder zur String Klasse um ein Beispiel zu haben. 😃

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

16.806 Beiträge seit 2008
vor 5 Jahren

Es gibt eben Operatoren, die können überladen werden - und welche die können nicht überladen werden.

Das Überladen von Operatoren verwendet man nur sehr sehr selten; vereinfacht an manchen Stellen aber den Code.

Wenn man eine eigene Klasse definiert hat (zB. "Dauer") die eine Dauer repräsentiert, kann man zum Beispiel den Operator "+" überladen, sodass zwei Objekte addiert werden können.

public class Dauer
{
  public Dauer (int minuten)
  {  
      Minuten = minuten;
  }

  public int Minuten {get;}

  public static Dauer operator+ (Dauer a, Dauer b)
  {
         var summe = a.Dauer + b.Dauer;
         return new Dauer (summe);
    }
}

Jetzt kann man zB schreiben

Dauer d1 = new Dauer(7);
Dauer d2 = new Dauer(3);

Dauer d3 = d1 + d2;
// d3 ist nun 10 Minuten

Aber wie gesagt; das braucht man wenn überhaupt nur sehr sehr selten und macht man eher aus dem Grund, dass es einfacher ist zu schreiben.
Gilt als Syntaktischer Zucker

T
2.219 Beiträge seit 2008
vor 5 Jahren

In meine 10+ Jahren mit .NET/C# musste ich nicht einmal einen Operator überladen.
Zwar ist es, wie in Abts Beispiel klar und sinnvoll umgesetzt, ein Vorteil in bestimmten Situationen aber für den Großteil deines Codes wirst du dies schlicht extrem selten bis nie benötigen.

Ich sehe auch in meinem Umfeld, primär Web Entwicklung im Front- und Backend, kaum einen Fall wo ich Operatoren sinnvoll überladen könnte.
Es gibt bestimmte einige Fälle wo dies nicht nur sinnvoll sondern auch aus verständnis Gründen nötig wäre.

Gerade wenn man mit komplexen Strukturen wie z.B. Matrizen arbeitet, ist es sinnvoll wenn diese überladene Operatoren haben um Matrizen direkt zu berechnen ohne auf Verkettungen von entsprechenden Methoden zugreifen zu müssen.

Aber wie gesagt, wirst du vermutlich selten damit was zu tun haben.
Zwar empfehle ich dir, dass Thema sich mal anzuschauen und ggf. auch mal etwas damit rumzutesten aber als Einsteiger solltest du das Thema nach hinten schieben.
Hier gibt es in C# genug andere Sprachmittel die wichtiger und häufiger verwendet werden.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

16.806 Beiträge seit 2008
vor 5 Jahren

Joa aber dann liegt das vielleicht am Umfeld, T-Virus.

Mit den Operatoren kann man schon schöne Dinge machen, um ein hübscheren Syntax zu bekommen.
Es ist gewiss kein Alltagsthema aber beim Schreiben von guten Bibliotheken ist das schon ein sehr praktisches Feature; damit hat man bei solchen Dingen schon öfter zutun - aber eben nicht jeden Tag.

M
mchrd Themenstarter:in
17 Beiträge seit 2018
vor 5 Jahren

Hallo zusammen,

vielen vielen Dank für die tolle Erklärung! Ich denke ich persönlich werde Überladungen (wenn überhaupt) sehr selten benötigen.

Ich wünsche euch einen schönen Tag!