【发布时间】:2016-08-04 06:33:36
【问题描述】:
给定以下类:
public abstract class ValueBase
{
public new abstract string ToString();
}
public class EmailAddress : ValueBase
{
public MailAddress MailAddress { get; }
public EmailAddress([NotNull] string address)
{
MailAddress = new MailAddress(address);
}
public override string ToString()
{
return MailAddress.Address;
}
}
为什么会这样:
var email = new EmailAddress("joe@bloggs.com");
string emailString1 = $"{email}";
string emailString2 = email.ToString();
返回类型名称的字符串 (Namespace.EmailAddress),而不是覆盖的 ToString 方法 (joe@bloggs.com)?
【问题讨论】:
-
创建一个new
ToString方法隐藏所有类型都有的Object.ToString方法是自找麻烦。 -
MailAddress的代码是什么? -
那里有两个字符串。
-
使用'public abstract override string ToString();'在你的基类中。
-
如果
ToString并没有真正覆盖任何东西,为什么还要在基类中定义它呢?我能想到的唯一有效用途是强制实现者覆盖ToString?