Возможно, я демонстрирую свое незнание некоторых часто используемых функций С# или .NET Framework, но я хотел бы знать, есть ли способ, основанный на принципе создания псевдонима типа EmailAddress
, который псевдонимы string
но такое, что я могу расширить его своими собственными методами вроде bool Validate()
?
Я знаю псевдонимы using x = Some.Type;
, но они не являются глобальными и не обеспечивают безопасность типа, т.е. можно заменить обычную string
для псевдонима использования в текущем файле. Я бы хотел, чтобы мой EmailAddress
был его собственным типом, независимым и не взаимозаменяемым с типом string
, который он тениет.
Мое текущее решение состоит в том, чтобы генерировать классы public sealed partial EmailAddress : IEquatable<EmailAddress>, IXmlSerializable
с шаблоном T4, генерирующим операторы преобразования неявных строк шаблона и другие подобные вещи. На данный момент это хорошо для меня и дает мне большую гибкость, но в глубине моего сознания кажется глупым, что я должен генерировать такое обильное количество кода шаблона, чтобы сделать что-то так же просто, как создать сильный псевдоним типа.
Возможно, это невозможно, кроме как с генерацией кода, но мне любопытно, если другие пытались что-то подобное с их дизайнами и какими были ваши впечатления. Если ничего другого, возможно, это может послужить хорошим вариантом использования для такой функции псевдонима в гипотетической будущей версии С#. Спасибо!
EDIT: реальное значение, которое я хочу из этого, состоит в том, чтобы иметь возможность получить безопасность типов с примитивными типами, которые представляют разные типы/форматы данных. Например, EmailAddress
и SocialSecurityNumber
и PhoneNumber
, все из которых используют string
как их базовый тип, но не являются взаимозаменяемыми типами сами по себе. Я думаю, что это дает вам гораздо более читаемый и самодокументирующий код, не говоря уже о преимуществах более сложных возможностей перегрузки методов, которые менее двусмысленны.