类型转换的operator重载为什么一定要加implicit限定符?
下面的代码编译是没有问题的
struct G
{
byte value;
public G(byte value)
{
this.value = value;
}
public static implicit operator byte(G d)
{
return d.value;
}
}
但是如果我去掉implicit关键字,编译就会报错"Declaration is not valid; use '<type> operator byte (...' instead"。
我如果改成explicit就也能编译通过了。
问题是,为什么非要加上这样的一个关键字,implicit在这里为什么不能去掉呢? 看编译器的错误信息似乎不能立刻得出什么结论啊。
------解决方案--------------------哎,对于语法规定没撒要追究的必要。
关键字之所以是关键字,那就表明他没有理由,只决定于当初写编译器的人想怎么识别,怎么解析了
至于这个explicit,implicit,两个都是修饰词,显式转换 和隐式转换
比如+操作
string x = DateTime.Now + ""; 就包含隐式转换