Guybrush Threepwood Geschrieben 3. Juni 2003 Geschrieben 3. Juni 2003 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
Klotzkopp Geschrieben 3. Juni 2003 Geschrieben 3. Juni 2003 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.
Guybrush Threepwood Geschrieben 3. Juni 2003 Autor Geschrieben 3. Juni 2003 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:
Klotzkopp Geschrieben 3. Juni 2003 Geschrieben 3. Juni 2003 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.
Guybrush Threepwood Geschrieben 3. Juni 2003 Autor Geschrieben 3. Juni 2003 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]
Klotzkopp Geschrieben 3. Juni 2003 Geschrieben 3. Juni 2003 In C++ muss der op= nichtstatischer Member sein. In C# kannst du den op= nicht überladen. Siehe auch hier.
Guybrush Threepwood Geschrieben 3. Juni 2003 Autor Geschrieben 3. Juni 2003 Achso... Danke du hast wieder mal ein Paar Rätsel für mich gelüftet:) Trotzdem sind einige Einschränkungen und Festlegungen in C# für mich nicht verständlich. Gruß Guybrush
Empfohlene Beiträge
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 erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden