2

私は最初に .Net で演算子のオーバーロードに遭遇しました。ずっと前に C++ で使用していましたが、それは "+" のような演算子のオーバーロードのようなものでした。

私は構造体を持っていますAccessToken:

[StructLayout(LayoutKind.Sequential)]
public struct AccessToken : IConvertible
{
    private string _value;
    public AccessToken(string encodedAccessToken)
    {
        this._value = encodedAccessToken;
    }

    public static implicit operator AccessToken(string encodedAccessToken)
    {
        return new AccessToken(encodedAccessToken);
    }
}

私は最初のメソッドがコンストラクタであることを理解しましたが、正確に2番目のメソッドがやっているのか疑問に思っていましたか? 間違いなく、ある種の演算子のオーバーロードです。http://msdn.microsoft.com/en-us/library/s53ehcz3(v=vs.71).aspxを読みましたが、正確なアイデアを得ることができませんでした。

4

2 に答える 2

1

stringからへの暗黙の変換AccessTokenです。したがって、次のように書くことができます。

string foo = "asdasd";
AccessToken token = foo;

これにより、2 番目のメンバーである暗黙の変換演算子が呼び出されます。それがないと、上記のコードはコンパイルされません。 からstringへの変換が利用できないためAccessTokenです。

個人的には、暗黙的な変換には細心の注意を払うことをお勧めしますコードが理解しにくくなる可能性があります。非常に便利な場合もありますが (LINQ to XML が思い浮かびます)、通常はコンストラクターまたは静的ファクトリ メソッドを使用します。

于 2012-04-25T06:35:17.210 に答える
0

暗黙の演算子を使用すると、 typeで定義された変換を使用して、Atypeのインスタンスを type に割り当てることができます。BA

変換メソッドなどを呼び出す必要がないため、コードを少し簡素化できますが、継承しなくB b = new A();ても入力できます。AB

ただし、混乱を招く傾向があり、より明示的なキャストと変換を好むと思います。

于 2012-04-25T06:37:52.077 に答える