Frage

Neben dem fragwürdigen Nutzen diese, ich mag fragen, ob es möglich ist, etwas in diese Richtung zu tun.

class MyPrimitive {
        String value;
        public String Value {
            get { return value; }
            set { this.value = value; }
        }
}

// Instead of doing this...
MyPrimitive a = new MyPrimitive();
a.Value = "test";
String b = a.Value;

// Isn't there a way to do something like this?
MyPrimitive a = "test";
String b = a;

Ich mag primitive Typen in benutzerdefinierten Klassen wickeln eine Eigenschaft mit der get und set Verfahren führen auch andere Dinge zu machen, wie die Validierung.
Da ich dies sehr oft tue ich dachte, dass es schön wäre auch eine einfachere Syntax zu haben, wie für die Standard-Primitiven.
Aber ich vermute nur, dass dies nicht nicht möglich ist, sondern auch konzeptionell falsch sein könnte. Keine Erkenntnisse wäre sehr zu begrüßen, danke.

War es hilfreich?

Lösung

Wert Typen verwenden (struct) und gibt ihm ein von dem Typ, den Sie auf der rechten Seite der Zuweisung wollen.

struct MyPrimitive
{
    private readonly string value;

    public MyPrimitive(string value)
    {
        this.value = value;
    }

    public string Value { get { return value; } }

    public static implicit operator MyPrimitive(string s)
    {
        return new MyPrimitive(s);
    } 

    public static implicit operator string(MyPrimitive p)
    {
        return p.Value;
    }
}

EDIT:. Aus der Struktur unveränderlich, weil Marc GRA absolut richtig

Andere Tipps

Sie können mit implizites Casting . Es ist nicht zu empfehlen, aber:

public static implicit operator string(MyString a) {
    return a.Value;
}
public static implicit operator MyString(string a) {
    return new MyString { value = a; }
}

Wieder schlechte Praxis.

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