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]

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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...