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);
    }
}

我知道第一种方法是构造函数,但我想知道第二种方法在做什么?绝对是某种运算符重载。我阅读了http://msdn.microsoft.com/en-us/library/s53ehcz3(v=vs.71).aspx但无法得到确切的想法。

4

2 回答 2

1

string这是从to的隐式转换AccessToken。所以你可以写:

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

这将调用第二个成员 - 隐式转换运算符。如果不存在,上面的代码将无法编译,因为将无法从stringto转换AccessToken

就我个人而言,我建议您对隐式转换非常小心——它们会使代码更难理解。只是偶尔它们会非常有用(想到 LINQ to XML),但我通常只会使用构造函数或静态工厂方法。

于 2012-04-25T06:35:17.210 回答
0

隐式运算符允许您使用 type中定义的转换将Atype的实例分配给 type 。BA

它可以稍微简化您的代码,因为您不必调用转换方法等,但B b = new A();即使A不继承也可以键入B

我认为它倾向于引入混乱,并且更喜欢更明确的强制转换和转换。

于 2012-04-25T06:37:52.077 回答