2017-03-13 1 views
-1

Bitte helfen Sie mir zu verstehen, warum C# nicht erlaubt eine tatsächliche Klasse einen Operator haben oder was ich in der Definition meiner Klasse tun könnte.C# operator definition nur für die abstrakte Klasse verfügbar

Der Aufruf zum Erstellen eines Errd funktioniert, weil es eine abstrakte Klasse ist. Aber können Sie/warum können Sie nicht auch einen Operator in einer tatsächlichen Klasse wie in der gemerkten Version meiner Errd-Definition haben?

Gibt es etwas in der gemerkten Version von Errd, die ich beheben könnte, um die Errd errd = eq; Arbeit zu machen?

Ich denke, ich sollte den IDE-Fehler hinzufügen. Wenn Errd nicht als abstrakter der IDE becrys definiert "

kann nicht implizit Gl Errd konvertieren. Eine explizite Konvertierung vorhanden ist. Vermissen Sie einen Guss?)

aber eine Gleichung ist nichts wie ein Errd für eine Besetzung würde keinen Sinn machen.

Eq eq = new Eq(); 
Copa copa = new Copa(eq); 
Errd errd = eq; 

public class Copa { 
    public Copa(Eq e) { 
     //.. do something 
    } 
} 

public class Erd : Errd { .... } 
public adstract class Errd { 
     public static implicit operator(Eq e) { 
      Erd q = new Erd(); 
      //.. do something 
      return q; 
     } 
} 

/* 
public class Errd { 
     public static implicit operator(Eq e) { 
      Errd q = new Errd(); 
      //.. do something 
      return q; 
     } 
} 
*/ 

Vielen Dank für Ihre Antwort rücksichtsvoll.

+2

Weil Sie zwei Typen mit genau demselben Namen haben ('Errd' und' Errd') ?? Wenn das nicht der Fall ist, dann aktualisieren Sie Ihren Code, da es wirklich schwer ist, zu sehen, was Sie mit dem oben genannten erreichen wollen, zumindest sollten Sie es kompilieren. Auch wenn Sie einen Fehler oder eine Ausnahme erhalten, wäre es hilfreich, wenn Sie diese Informationen enthalten. – Igor

+2

Die zweite Definition von Errd ist auskommentiert. – Steve

+2

Bitte fügen Sie ein [minimales, vollständiges und überprüfbares Beispiel] (http://stackoverflow.com/help/mcve) bei. Bitte lesen Sie auch [Wie stelle ich eine gute Frage] (http://stackoverflow.com/help/how-to-ask). Siehe auch Abschnitt [Operator überschreiben ==] (https://msdn.microsoft.com/ru-ru/library/ms173147 (v = vs.80) .aspx) und stellen Sie sicher, dass Ihre Syntax korrekt ist (ist es nicht). – Igor

Antwort

2

Sie müssen den Typ der Klasse hinzufügen, mit der Sie die implizite Umwandlung überladen möchten. In Ihrem Beispiel würde es in etwa so aussehen:

public static implicit operator Errd(Eq e) 

Beachten Sie die Errd.

Weitere Informationen zum Überladen des expliziten und impliziten Castings finden Sie unter this msdn article.

+1

Oh Mann wirklich?!?! Du bist richtig und mein Schlechter. In der Tat gibt es ein wenig rot-squiggly, wo der Name des Konstruktors fehlt. Der Squiggly war nur zu klein für mich zu bemerken. – Steve

Verwandte Themen