Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hi,

kann mir einer erklären warum in C# Operatoren, die überladen werden,

static deklariert werden müssen?

Das macht das doch ziemlich unsicher, oder? Ich überlade einen Operator doch

normalerweise nur um ihn den gegebenheiten der Klasse anzupassen.

Wenn ich ihn aber als static deklariere heißt das ja das ich ihn auch ohne Klassen-

instanz benutzen kann wodurch Abstürze und so entstehen könnten.

Ich hoffe es ist verständlich was ich meine.

Gruß

Guybrush

Geschrieben

Soweit ich weiß, sind nur bestimmte Operator statisch. Die Zuweisungsoperatoren, z.B. operator+= sind immer nichtstatisch. Das hat auch seinen Sinn.

Wenn man operator+ z.B. als Member deklarieren würde, wären automatische Umwandlungen nur mit dem zweiten Operanden möglich.

Angenommen, du hast eine Klasse SuperInt, die beliebig große Ganzzahlen verarbeiten kann. Die Klasse hat einen Copy-Ctor für int, damit geht folgendes:

SuperInt s( 5 );

SuperInt t = s + 2;

Aber folgendes geht nicht, weil der erste Operand bei einem Member-Op immer ein SuperInt sein muss:

SuperInt u = 2 + s;

Darum würde man in C++ den operator+ außerhalb der Klasse deklarieren. In C# macht man das mit statischen Ops. Finde ich übrigens sehr sinnvoll.

Geschrieben
Original geschrieben von Klotzkopp

SuperInt u = 2 + s;

Darum würde man in C++ den operator+ außerhalb der Klasse deklarieren. In C# macht man das mit statischen Ops. Finde ich übrigens sehr sinnvoll.

Aber warum funktioniert das wenn der Operator statisch ist?

Und das erklärt doch trotzdem nicht warum static zwingend vorgeschrieben ist, oder?

:confused:

Geschrieben
Original geschrieben von Guybrush Threepwood

Aber warum funktioniert das wenn der Operator statisch ist?

Weil dann beide Operanden als Parameter auftauchen, und damit beide gegebenenfalls umgewandelt werden können. Ein nichtstatischer Member-Op+ hätte ja nur einen Parameter.

Und das erklärt doch trotzdem nicht warum static zwingend vorgeschrieben ist, oder?
In C++ wäre ein Op+ sinnvollerweise eine globale Funktion. Und da du in C# keine globalen Funktionen haben kannst, bleibt dir nichts anderes übrig.
Geschrieben

Ok das ist mir jetzt klar.

Aber wie soll man den Zuweisungsoperator statisch deklarieren, in C++ bekommt

dann die Meldung das er nicht statisch sein darf und in C# bekomme ich die Meldung

das ein unearer Operator erwartet wird?

Bsp.:


class String
{
public String()
{
var = NULL;
}
public static operator= (string ein)
{
var = ein;
}
private string var;
}
[/PHP]

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...