小编Ada*_*ith的帖子

可以/我应该使用隐式运算符而不是重写ToString吗?

我有一个类,我想轻松写出字符串(例如用于记录目的).我可以使用隐式运算符隐式地将对象强制转换为字符串而不是覆盖ToString方法吗?

例如,我有一个带班姓名年龄:

public class Person
{
    public string Name { get; set; }
    public int Age { get; set;}
}
Run Code Online (Sandbox Code Playgroud)

我可以覆盖ToString:

public override string ToString()
{
    return String.Format("Name: {0}, Age: {1}", this.Name, this.Age);
}
Run Code Online (Sandbox Code Playgroud)

或者我可以使用隐式运算符:

public static implicit operator string(Person p)
{
    return String.Format("Name: {0}, Age: {1}", p.Name, p.Age);
}
Run Code Online (Sandbox Code Playgroud)

现在,将此对象传递给期望字符串的方法,而不是

Log(Person.ToString());
Run Code Online (Sandbox Code Playgroud)

我可以打电话

Log(Person);
Run Code Online (Sandbox Code Playgroud)

我甚至可以在隐式转换中调用重写的ToString

public static implicit operator string(Person p)
{
    return p.ToString();
}
Run Code Online (Sandbox Code Playgroud)


这是对String的隐式运算符强制转换的错误用法吗?需要此功能时的最佳做法是什么?我怀疑只是重载ToString将是最佳实践答案,如果是这样,我有几个问题:

  1. 我什么时候会使用隐式转换为String?
  2. 使用隐式强制转换为String的最佳实践示例是什么?

c# operator-overloading implicit-conversion

13
推荐指数
1
解决办法
3382
查看次数