У меня есть класс, который я хочу легко записать в строки (например, для ведения журнала). Могу ли я использовать неявный оператор для неявного применения объекта к строке, а не для переопределения метода ToString?Можно ли использовать неявный оператор вместо переопределения ToString?
К примеру, у меня есть Person класс с Имя и Возраст:
public class Person
{
public string Name { get; set; }
public int Age { get; set;}
}
я могу переопределить ToString:
public override string ToString()
{
return String.Format("Name: {0}, Age: {1}", this.Name, this.Age);
}
Или я мог бы использовать неявный оператор:
public static implicit operator string(Person p)
{
return String.Format("Name: {0}, Age: {1}", p.Name, p.Age);
}
Теперь, проходя этот объект в метод, который ожидает строку, вместо
Log(Person.ToString());
Я могу просто позвонить
Log(Person);
Я мог бы даже просто вызвать перекрытый ToString в неявном гипсе
public static implicit operator string(Person p)
{
return p.ToString();
}
Является ли это плохо использование неявный оператор, переводящий String? Какова наилучшая практика при использовании этой функции? Я подозреваю, что просто перегрузки ToString будет лучшей практикой ответ, и если да, у меня есть несколько вопросов, то:
- Когда я когда-либо использовать неявное приведение к String?
- Каков наилучший пример использования неявного приведения в String?