.net运算符重载???类型转换运算符,它究竟是如何工作的?

时间:2012-04-25 06:32:03

标签: .net operator-overloading conversion-operator

我第一次在.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,但无法理解。

2 个答案:

答案 0 :(得分:1)

这是从stringAccessToken的隐式转换。所以你可以写:

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

这会调用第二个成员 - 隐式转换运算符。如果不存在,则上述代码将无法编译,因为stringAccessToken没有可用的转换。

我个人建议你非常小心隐式转换 - 他们可以让代码更难理解。只是偶尔它们非常有用(LINQ to XML会让人想起),但我通常会选择构造函数或静态工厂方法。

答案 1 :(得分:0)

隐式运算符允许您将A类型的实例分配给B类型,并在A类型中定义转换。

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

我认为它往往会引入混乱,并且更喜欢更明确的演员和转换。