Как я могу позволить моему классу быть неявно преобразованным в строку в C #? - PullRequest
4 голосов
/ 13 июля 2010

Вот что я хочу сделать ...

public class A
{
    public string Content { get; set; }
}

A a = new A();
a.Content = "Hello world!";
string b = a; // b now equals "<span>Hello world!</span>"

Поэтому я хочу контролировать , как a преобразуется в String ... каким-то образом ...

Ответы [ 4 ]

12 голосов
/ 13 июля 2010

Вы можете вручную переопределить неявные и явные операторы приведения для класса. Учебник здесь .Я бы сказал, что в большинстве случаев это плохой дизайн.Я бы сказал, что легче понять, что происходит, если бы вы написали

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>"

8 голосов
/ 13 июля 2010
public class A
{
    public string Content { get; set; }
    public static implicit operator string(A a)
    {
        return string.Format("<span>{0}</span>", a.Content);
    }
}
3 голосов
/ 13 июля 2010
public static implicit operator string(A a)
{
    return "foo";
}
0 голосов
/ 13 июля 2010

переопределение ToString () было бы неплохо. Более того, в режиме отладки вы получили подсказку с возвращаемым значением ToString ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...