Jam*_*nne 18 c# alias strong-typing
也许我在展示我对C#或.NET框架的一些常用功能的无知,但我想知道是否有一种本机支持的方法来创建类型别名,如EmailAddress别名,string但我可以扩展它我自己的方法如何bool Validate()?
我知道using x = Some.Type;别名,但这些不是全局的,也不提供类型安全性,即可以string在当前文件中换出普通的别名.我希望我EmailAddress是自己的类型,独立,不能与string它阴影的类型互换.
我目前的解决方案是public sealed partial EmailAddress : IEquatable<EmailAddress>, IXmlSerializable使用T4模板生成类,生成样板隐式字符串转换运算符和其他类似的东西.这对我来说很好,并且给了我很大的灵活性,但在我的脑海里,我必须生成如此丰富的样板代码才能做一些像创建强类型别名一样简单的事情.
也许除了代码生成之外,这是不可能的,但我很好奇,如果其他人尝试过类似于他们的设计和你的经历.如果没有别的,也许这可以作为假设未来版本的C#中的这种别名功能的一个很好的用例.谢谢!
编辑:我想要的真正价值是能够使用表示数据的不同类型/格式的原始类型获得类型安全性.例如,a EmailAddress和a SocialSecurityNumber和a PhoneNumber,所有这些都string用作它们的基础类型,但它们本身并不是可互换的类型.我认为这会让你获得更具可读性和自我记录的代码,更不用说更多方法过载可能性的附加好处,而不是模糊不清.
If you look at the .NET Framework System.Uri is the closest example that is similar to an email address. In .NET the pattern is to wrap something in a class and add constraints that way.
我认为,添加强类型为简单类型增加其他约束的强类型是一种有趣的语言功能,我相信某些功能语言具有此功能。我想不起来该语言的名称,它可以让您在值中添加诸如英尺之类的尺寸单位,并对方程进行尺寸分析以确保单位匹配。