我第一次在.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,但无法理解。
答案 0 :(得分:1)
这是从string
到AccessToken
的隐式转换。所以你可以写:
string foo = "asdasd";
AccessToken token = foo;
这会调用第二个成员 - 隐式转换运算符。如果不存在,则上述代码将无法编译,因为string
到AccessToken
没有可用的转换。
我个人建议你非常小心隐式转换 - 他们可以让代码更难理解。只是偶尔它们非常有用(LINQ to XML会让人想起),但我通常会选择构造函数或静态工厂方法。
答案 1 :(得分:0)
隐式运算符允许您将A
类型的实例分配给B
类型,并在A
类型中定义转换。
它可以简化您的代码,因为您不必调用转换方法等,但即使B b = new A();
不继承A
,也可以键入B
。
我认为它往往会引入混乱,并且更喜欢更明确的演员和转换。