Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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.

  • Autor
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:

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

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 Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.