假设我有一个电话号码,我的类需要对其进行验证和跟踪,并且在大多数情况下,电话号码只是一个字符串,因此,为了保持简单,只需创建一个Phone类并继承string即可。既然我不能这样做,那么下一个最好的方法是什么呢?添加一个字符串作为私有成员并重载等于/=运算符,以便可以将其传递和设置为字符串?
发布于 2009-10-14 17:52:39
我建议你采纳约翰尼斯·鲁道夫或C·罗斯的建议。您还可以查看implicit关键字的行为,这将允许您以类似于字符串的方式进行赋值,同时仍然执行验证。
即:
public class PhoneNumber {
private String number;
public PhoneNumber(String s) {
// validation code here, throw exception if not valid
number = s;
}
public static implicit operator PhoneNumber(String s) {
return new PhoneNumber(s);
}
}发布于 2009-10-14 17:46:21
更喜欢组合而不是继承。
您希望您的电话号码可以从字符串分配吗?当然不是因为以下情况是可能的:
Person.PhoneNumber = "FOO"像这样的东西感觉更自然:
Person.PhoneNumber = new PhoneNumber("015-123456");你可以在构造器中进行自定义验证,并另外决定你希望它是不可变的(好的,字符串也是不可变的)
发布于 2009-10-15 01:49:48
简而言之,是的,拥有一个私人成员。但是,我建议使用静态解析成员,而不是重载赋值。
PhoneNumber p = PhoneNumber.Parse("704 - 576- 4000");这更标准,可读性也更好。另外,即使你可以从string继承,我也不建议这样做,因为String有复杂的内部功能,应该与你的类分开。此外,从string继承会暴露出许多对电话号码没有意义的方法(例如: Concat、不准确的比较等)。
https://stackoverflow.com/questions/1567878
复制相似问题