2016-04-04 17 views
-5
public static explicit operator int(Author a) 
    { 
     return a.Publications.Length; 
    } 
    public static implicit operator int(Author a) 
    { 
     return a.Publications.Length; 
    } 

Warum kann ich das nicht tun? Mein Lehrer hat mich gebeten, die implizite und explizite Umwandlung für Operator int für die Author-Klasse zu überschreiben. + kann ich eine Erklärung für die tiefe Kopie bekommen: D?Explizit und implizit für operator (int)

+1

* Fragen, die uns bitten, ein Buch, ein Tool, eine Softwarebibliothek, ein Lernprogramm oder eine andere Offsite-Ressource zu empfehlen oder zu finden, sind Off-Topic für Stack Overflow * – Eser

+2

Ich schlage vor, Sie bitten Ihren Lehrer um Klarstellung, da diese Anfrage falsch scheint. – juharr

+2

Stellen Sie keine zwei Fragen in einer Frage. Wenn Sie zwei Fragen haben, dann schreiben Sie zwei Fragen. –

Antwort

9

Warum kann ich das tun?

Sie können das nicht tun, weil die C# -Spezifikation besagt, dass Sie nicht in Abschnitt 10.10.3.

[...] eine Klasse oder Struktur kann nicht erklären, sowohl einen impliziten und expliziten Umwandlungsoperator mit den gleichen Quell- und Zieltypen. Jetzt

Sie könnte auch sagen:

Beantworten eines „Warum“ Frage mit „denn das ist, was er sagt, in der Spezifikation“ ist tief unbefriedigend.

Sie haben eine vage Frage gestellt. Wenn Sie eine spezifischere Antwort wünschen, dann stellen Sie eine spezifischere Frage. Wie wäre es mit:

Welche Faktoren könnte das C# -Designteam bei der Erstellung dieser Regel berücksichtigt haben?

Jede implizite Konvertierung ist bereits eine explizite explizite Konvertierung. Das heißt, wenn es eine implizite Konvertierung ist, die erlaubt:

Shape s = whatever; 
Fruit f = s; 

dann

Fruit f = (Fruit)s; 

ist auch rechtliche und die gleiche Sache bedeuten muss. Es wäre bizarr, wenn diese beiden Anweisungen unterschiedliche Semantiken hätten, aber in einer Welt, in der man zwei verschiedene Versionen derselben Konvertierung deklarieren könnte, eine explizite und eine implizite, müsste der Compiler diese Situation erkennen und sicherstellen, dass die richtige Konvertierung erfolgt benutzt.

Die Konvertierungslogik, insbesondere die benutzerdefinierte Konvertierungslogik, ist in C# äußerst komplex. Das Entfernen unnötiger, verwirrender Komplikationen ist eine gute Idee.

kann ich eine Erklärung für die tiefe Kopie

Sie in einer Frage nicht zwei Fragen stellen. Stellen Sie eine zweite Frage, wenn Sie eine zweite Frage haben.

0

Ich vermute, dass Sie sehen, Compiler Fehler CS0557.

FYI, wenn Sie einen impliziten Operator haben, brauchen Sie auch kein explizites. Implizit bedeutet, dass keine direkte Besetzung erforderlich ist.

Explicit:

Author a = new Author(); 
int i = (int)a; 

Implizit:

Author a = new Author(); 
int i = a; 
+1

Sie haben sie rückwärts. 'int i = (int) a;' ist explizit, nicht implizit. – juharr

+0

Whoops! Ich hatte meine Beispiele rückwärts, oder? :-) Danke mein Herr. – Sacrilege

Verwandte Themen