Can/should I use implicit operator instead of overriding ToString?
我有一个类,我希望它能很容易地写出字符串(例如,用于日志记录)。是否可以使用隐式运算符将对象隐式转换为字符串,而不是重写ToString方法?
例如,我有一个人名和年龄的Person类:
1 2 3 4 5 | public class Person { public string Name { get; set; } public int Age { get; set;} } |
我可以覆盖到字符串:
1 2 3 4 | public override string ToString() { return String.Format("Name: {0}, Age: {1}", this.Name, this.Age); } |
或者我可以使用隐式运算符:
1 2 3 4 | public static implicit operator string(Person p) { return String.Format("Name: {0}, Age: {1}", p.Name, p.Age); } |
现在,当将此对象传递给需要字符串的方法时,
1 | Log(Person.ToString()); |
我可以打电话
1 | Log(Person); |
我甚至可以在隐式演员表中调用重写的ToString
1 2 3 4 | public static implicit operator string(Person p) { return p.ToString(); } |
< BR>这是隐式运算符强制转换为字符串的错误用法吗?当需要此功能时,什么是最佳实践?我怀疑仅仅是过载到字符串将是最佳实践答案,如果是这样,我有几个问题,那么:
使用
重写
当对象以某种方式与目标类型兼容时,应使用隐式转换。也就是说,您可能有表示"lastname"的类型,并且有一些特殊的方法,但对于大多数实际用途来说,它是一个字符串。
注意:关于隐含的msdn建议:
Use it to enable implicit conversions between a user-defined type and another type, if the conversion is guaranteed not to cause a loss of data.