Ist es in C # möglich, einen allgemeinen Cast-Operator in der folgenden Art und Weise zu überlasten?

StackOverflow https://stackoverflow.com/questions/1025576

Frage

Nur frage mich, ob es überhaupt ist den folgenden Code in C # 3.5 darstellen:

public struct Foo<T> {

    public Foo(T item) {
        this.Item = item;
    }

    public T Item { get; set; }

    public static explicit operator Foo<U> ( Foo<T> a )
        where U : T {

        return new Foo<U>((U)a.Item)
    }
}

Danke

War es hilfreich?

Lösung

Conversion Operatoren können nicht generisch sein. Aus dem spec Abschnitt 10.10, hier ist das Format einer Umwandlung betreiber declarator:

conversion-operator-declarator:
    implicit   operator   type   (   type   identifier   )
    explicit   operator   type   (   type   identifier   )

Man vergleiche dies mit, sagen wir, ein Verfahren-Header:

  

Methode-Header :    Attribute opt Methode-Modifikatoren opt Teil opt return-type    Mitglied-name Typ-Parameter-Liste opt ( formal-Parameter-Liste opt )    Typ-Parameter-Einschränkungsklauseln opt

(Sorry über die Formatierung -. Nicht sicher, wie es besser machen)

Beachten Sie, dass der Bediener Format keinen Typ Parameterliste oder Typ-Parameter Einschränkungen enthält.

Andere Tipps

Ihr Code läuft darauf hinaus, die Zeile: return new Foo<U>((U)a.Item)

Wenn Sie versuchen, eine Basisklasse zu einer vererbten Klasse zuweisen, was unmöglich ist.

Lassen Sie uns sagen, T (Basisklasse) vom Typ Stream und U ist vom Typ MemoryStream (geerbt Klasse), Sie können keine Stream auf eine Variable vom Typ MemoryStream zuweisen.

Ich denke, die kurze Antwort ist „nicht möglich. Versuchen Sie, ein Verfahren statt mit“

Auch scheint Betrogene dieser Frage zu sein Lösung für überladenen Operator Einschränkung in .NET Generika

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top