字符串或其他密封类的强类型

Chu*_*ckZ 8 c# string inheritance strong-typing

我用通用术语来表达我的例子,因为它可以解决问题,而无需深入了解我的具体问题细节.

假设您有一堆将字符串作为参数的方法.假设一个字符串是一个人的"名字"而另一个字符串是一个人的"姓氏".可能还有其他字符串,如"最喜欢的食物".

现在,在您的代码中,您将继续查找运行时错误,因为您正在混淆参数.您可以切换"名字"和"姓氏"的顺序,或在您应该使用另一个时使用一个.强类型语言的价值在于它会在构建时而不是运行时发现这些错误.

因此,一种可能的解决方案是从字符串派生类.

public class FirstName : String
{
}

public class LastName : String
{
}
Run Code Online (Sandbox Code Playgroud)

现在,如果您传递了错误类型的字符串,编译器会抱怨.以上是不可能的,因为String是密封的.另外,"using"语句不起作用(我认为),因为编译器在混合时不会抱怨.

using LastName = String;
Run Code Online (Sandbox Code Playgroud)

当然,我可以构建包装字符串然后编写强制转换方法的类,但这似乎比它的价值更麻烦.

gdo*_*ica 1

只是不要忘记开设其他课程,例如

A-FileStreamReader : StreamReader
B-FileStreamReader : StreamReader
Age : int
Phone : long
...
...
SLaksPhoneNumer : string // added under pressure...    
Run Code Online (Sandbox Code Playgroud)

解决方案是,使用正确的参数调用方法,当方法要求输入名字时,给出它而不是姓氏......

顺便说一句,什么会阻止你做(在编译时或运行时):

new FirstName("Skeet");
new LastName("Jon");
Run Code Online (Sandbox Code Playgroud)

  • “只是不要犯错误”。现在我为什么没有想到这一点:^) (4认同)
  • _电话号码是字符串,而不是长整型_ (2认同)