Vielleicht demonstriere ich meine Ignoranz einiger häufig verwendeter feautre von C# oder dem .NET-Framework, aber ich würde gerne wissen, ob es eine nativ unterstützte Möglichkeit gibt, einen Typalias wie EmailAddress
zu erstellen, der aber string
aliasiert kann es mit meinen eigenen Methoden wie bool Validate()
erweitern?Gibt es eine Möglichkeit, C# stark typisierte Aliase existierender primitiver Typen wie `string` oder` int` zu definieren?
Ich kenne die using x = Some.Type;
Aliase, aber diese sind nicht global noch bieten sie Typ Sicherheit, d. H. Man könnte eine gewöhnliche string
für die Verwendung von Alias in der aktuellen Datei austauschen. Ich möchte, dass mein EmailAddress
ein eigener Typ ist, unabhängig und nicht austauschbar mit dem string
Typ, den es beschattet.
Meine aktuelle Lösung besteht darin, public sealed partial EmailAddress : IEquatable<EmailAddress>, IXmlSerializable
Klassen mit einer T4-Vorlage zu erzeugen, die die impliziten String-Konvertierungsoperatoren und andere solche Dinge erzeugt. Dies ist für mich im Moment in Ordnung und gibt mir viel Flexibilität, aber im Hinterkopf scheint es albern, dass ich so viel Code erzeugen muss, um etwas so einfaches wie das Erstellen eines starken Alias zu tun.
Vielleicht ist das nicht anders als mit Code-Generierung, aber ich bin neugierig, wenn andere etwas ähnliches mit ihren Designs versucht haben und was Ihre Erfahrungen waren. Wenn nichts anderes, könnte dies vielleicht ein guter Anwendungsfall für ein solches Alias-Feature in einer hypothetischen zukünftigen Version von C# sein. Vielen Dank!
EDIT: Der eigentliche Wert, den ich daraus haben möchte, ist Typsicherheit mit primitiven Typen, die verschiedene Typen/Formate für Daten darstellen. Zum Beispiel ein EmailAddress
und ein SocialSecurityNumber
und ein PhoneNumber
, von denen alle string
als ihren zugrunde liegenden Typ verwenden, die aber nicht austauschbare Typen an und für sich sind. Ich denke, das bringt Ihnen viel mehr lesbaren und selbstdokumentierenden Code, ganz zu schweigen von den zusätzlichen Vorteilen von mehr Methodenüberladung Möglichkeiten, die weniger zweideutig sind.
Warum abstimmen und keinen Kommentar hinterlassen? Kommt schon Leute. – JMD
Es scheint, dass Sie zumindest eine vernünftige C# knoledgde haben, so mag mein Kommentar dumm erscheinen, aber was Sie wollen, heißt "Typhierarchie" und die Jungs, die die String-Klasse codierten, wollten Sie daran hindern, diese "OO-Funktion" zu verwenden String-Klasse versiegelt, deshalb können Sie nicht tun, was Sie wollen. Der beste Ansatz ist, dass Sie jetzt aktiv sind: Machen Sie Ihren eigenen Typ und eine implizite Umwandlung in String. –
@Andre: warum nicht in Betracht ziehen, deinen Kommentar als Antwort zu posten? –