4

これが私がやりたいことです...

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

4 に答える 4

12

クラスの暗黙的および明示的なキャスト演算子を手動でオーバーライドできます。チュートリアルはこちら。ただし、ほとんどの場合、デザインが悪いと主張します。あなたが書いた方が何が起こっているのか分かりやすいと思います

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

于 2010-07-13T07:05:06.550 に答える
8
public class A
{
    public string Content { get; set; }
    public static implicit operator string(A a)
    {
        return string.Format("<span>{0}</span>", a.Content);
    }
}
于 2010-07-13T07:07:38.307 に答える
3
public static implicit operator string(A a)
{
    return "foo";
}
于 2010-07-13T07:07:08.490 に答える
0

ToString()をオーバーライドするのは良い方法です。さらに、デバッグモードでは、ToString()の戻り値に関するヒントが得られます。

于 2010-07-13T07:34:54.183 に答える