2

同僚と私が .NET での変換について話し合ったとき、彼は型を変換する方法が 4 つあることを指摘しました。最初は、暗黙的および明示的な 2 つしか考えられませんでしたが、ユーザー定義の変換とヘルパー クラスの使用を指摘したので、私はそうすることにしました。ここで調べてみてください http://msdn.microsoft.com/en-us/library/ms173105.aspx読んでいるうちに、私は多くのWPFを実行し、IValueConverterインターフェイスを頻繁に使用していることに気づきました。

私の質問は次のように始まりました-IValueConverterはヘルパークラスを使用した変換の単なる例ではありません(もちろん実装する場合)? 次に、ユーザー定義の変換とヘルパー クラスを使用した変換の実際の違いは何ですか? 上記の MSDN ページのリンクをたどると、ドキュメントはかなりスリムになります。これは、変換演算子ページの例です。

class SampleClass
{
    public static explicit operator SampleClass(int i)
    {
        SampleClass temp = new SampleClass();
        // code to convert from int to SampleClass...

        return temp;
    }
}

それは実際にはそれほど明確ではありません。私には、ctorにintが必要な静的クラスのように見えますか?

とにかく - 願わくば、一部の C# 忍者がこの主題を照らしてくれることを願っています。最後に 1 つの考えは、通常の日常のコードで本当に正当な理由 (スプレッドシートの解析など) がない限り、変換を避けようとすることです。私はそれをコードのにおいだと考える傾向があります。

ありがとう

4

1 に答える 1

2

これはあなたの質問に対する完全な回答ではありませんが、そのコード スニペットはクラスの「明示的なキャスト」をオーバーライドします。これは、メソッド シグネチャからはあまり直感的ではありません。基本的に、次のことができます。

int one = 1;
SampleClass x = (SampleClass)one;

常識では、キャストは失敗するはずintですSampleClassが、質問のコードスニペットが有効になり、キャストが可能になるためです。

他の補完方法は次のとおりです。

public static implicit operator SampleClass(int i)

ここのキーワードはimplicitの代わりであることに注意してください。explicitこのバージョンでは暗黙的なキャストが許可されるため、次のように動作します。

int one = 1;
SampleClass x = one;

キャストを指定する必要がなくなったことに注意してください。

于 2012-07-06T13:03:22.107 に答える