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 Zitieren
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. Zitieren
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: Zitieren
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. Zitieren
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] Zitieren
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. Zitieren
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 Zitieren
Empfohlene Beiträge
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.