日期:2014-05-17  浏览次数:20870 次

类型转换的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 + ""; 就包含隐式转换