在弄清楚这两个关键字的区别之前,得需要搞清楚另外一个关键字:operator.
Operator MSDN 解释:
使用 operator 关键字来重载内置运算符,或提供类或结构声明中的用户定义转换。
也就是说: Operator具有两种功能,1)运算符重载 2)用户定义类的转换,也就是操作符转换。
这里只说 操作符转换,比如我定义了下面一个类(代码来自MSDN)
class Digit
{
public Digit(double d) { val = d; }
public double val;
// ...other members
}
如果我想把Digit类转成Dobule型,也就是
Digit dig = 12;肯定会报错误,因为这里没有定义从Double转为Digit的转换。 现在这样定义:
class Digit
{
public Digit(double d) { val = d; }
public double val;
// ...other members
// User-defined conversion from Digit to double
public static implicit operator double(Digit d)
{
return d.val;
}
// User-defined conversion from double to Digit
public static implicit operator Digit(double d)
{
return new Digit(d);
}
}
就不会报错,因为这里已经有从Double转 Digit操作符转换的定义:
public static implicit operator Digit(double d)
{
return new Digit(d);
}
转回来说Explicit和Implicit
Explicit 就是显示的类型转换,如果这样定义了double操作符
// User-defined conversion from Digit to double
public static explicit operator double(Digit d)
{
return d.val;
}
double num = dig; 就会编译错误。
需要显示的将一个Digit型转为Double型
double num = (double)dig;