首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从密封类继承

从密封类继承
EN

Stack Overflow用户
提问于 2009-10-14 17:44:24
回答 4查看 1.2K关注 0票数 1

假设我有一个电话号码,我的类需要对其进行验证和跟踪,并且在大多数情况下,电话号码只是一个字符串,因此,为了保持简单,只需创建一个Phone类并继承string即可。既然我不能这样做,那么下一个最好的方法是什么呢?添加一个字符串作为私有成员并重载等于/=运算符,以便可以将其传递和设置为字符串?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-10-14 17:52:39

我建议你采纳约翰尼斯·鲁道夫或C·罗斯的建议。您还可以查看implicit关键字的行为,这将允许您以类似于字符串的方式进行赋值,同时仍然执行验证。

即:

代码语言:javascript
复制
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);
    }
}
票数 1
EN

Stack Overflow用户

发布于 2009-10-14 17:46:21

更喜欢组合而不是继承。

您希望您的电话号码可以从字符串分配吗?当然不是因为以下情况是可能的:

代码语言:javascript
复制
Person.PhoneNumber = "FOO"

像这样的东西感觉更自然:

代码语言:javascript
复制
Person.PhoneNumber = new PhoneNumber("015-123456");

你可以在构造器中进行自定义验证,并另外决定你希望它是不可变的(好的,字符串也是不可变的)

票数 7
EN

Stack Overflow用户

发布于 2009-10-15 01:49:48

简而言之,是的,拥有一个私人成员。但是,我建议使用静态解析成员,而不是重载赋值。

代码语言:javascript
复制
PhoneNumber p = PhoneNumber.Parse("704 - 576- 4000");

这更标准,可读性也更好。另外,即使你可以从string继承,我也不建议这样做,因为String有复杂的内部功能,应该与你的类分开。此外,从string继承会暴露出许多对电话号码没有意义的方法(例如: Concat、不准确的比较等)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1567878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档