我用通用术语来表述我的示例,因为它无需深入探讨我的具体问题细节就可以理解要点。
假设您有一堆将字符串作为参数的方法。假设一个字符串是一个人的“名字”,另一个是一个人的“姓氏”。可能还有其他字符串,例如“最喜欢的食物”。
现在,在您的代码中,您不断发现运行时错误,因为您混淆了参数。您可以调换“名字”和“姓氏”的顺序,或者在您应该使用另一个时使用其中一个。强类型语言的值(value)在于它会在构建时而不是运行时发现这些错误。
因此,一种可能的解决方案是仅从字符串派生类。
public class FirstName : String
{
}
public class LastName : String
{
}
现在,如果您传递了错误类型的字符串,编译器会报错。 以上是不可能的,因为 String 是密封的。 此外,“using”语句将不起作用(我认为),因为当我将它们混淆时编译器不会提示。
using LastName = String;
当然,我可以构建包装字符串的类,然后编写强制转换方法,但这似乎比它值得的麻烦多了。
最佳答案
我不知道您的目标是什么,但您似乎对此很认真 :) 因此一个可能的解决方案是使用通用容器类。它确实不如从密封类继承舒服。
public class Container<T>
{
public T Value { get; protected set; }
public Container(T value)
{
Value = value;
}
}
public class FirstName : Container<string>
{
public FirstName(string firstName) : base(firstName) { }
}
public class LastName : Container<string>
{
public LastName(string lastName) : base(lastName) { }
}
public class Age : Container<int>
{
public Age(int age) : base(age) { }
}
public class Program
{
public void Process(FirstName firstName, LastName lastName, Age age)
{
}
}
关于c# - 字符串或其他密封类的强类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9877272/