Вы можете вручную переопределить неявные и явные операторы приведения для класса. Учебник здесь .Я бы сказал, что в большинстве случаев это плохой дизайн.Я бы сказал, что легче понять, что происходит, если бы вы написали
string b = a.ToHtml();
Но это, безусловно, возможно ...
public class A
{
public string Content { get; set; }
public static implicit operator string(A obj)
{
return string.Concat("<span>", obj.Content, "</span>");
}
}
Чтобы привести пример, почему я не рекомендую эторассмотрим следующее:
var myHtml = "<h1>" + myA + "</h1>";
Выше приведено: "<h1><span>Hello World!</span></h1>"
Теперь придет какой-то другой разработчик и подумает, что приведенный выше код выглядит плохо, и переформатирует его вследующее:
var myHtml = string.Format("<h1>{0}</h1>", myA);
Но string.Format
внутренне вызывает ToString
для каждого аргумента, который он получает, поэтому мы больше не имеем дело с неявным приведением, и в результате другой разработчик изменитсярезультат что-то вроде "<h1>myNamespace.A</h1>"