那么$“{email}”字符串会自动转换为string.Format(“{0}”,email),而此方法的第二个参数是params object []类型.所以它在调用ToString()方法之前,将所有的值上传到对象.在您的代码中,您只需在ValueBase类中替换新的方法,并且EmailAddress类中的override关键字将实现此抽象方法,而不是原始对象.
如果您将第二个值转换为明确对象,您可以轻松测试它:
var email = new EmailAddress("joe@bloggs.com");
string emailString1 = $"{email}";
string emailString2 = ((object)email).ToString();
如你所见,emailString2也返回typename.您可以从抽象类中删除ToString()方法,并让EmailAdress类实现对象的ToString()或在抽象类中实现它.例如 :
public abstract class ValueBase
{
// overrides object's ToString()
public override string ToString()
{
return base.ToString();
}
}
public class EmailAddress : ValueBase
{
...
// overrides ValueBase's ToString()
public override string ToString()
{
return MailAddress.Address;
}
}
使用这个新的代码,输出是如预期的:
joe@bloggs.com
joe@bloggs.com