显示转换explicit和隐式转换implicit

用户自定义的显示转换和隐式转换

显式转换implicit关键字告诉编译器,在源代码中不必做显示的转型就可以产生调用转换操作符方法的代码.

隐式转换implicit关键字告诉编译器只有当源代码中指定了显示的转型时,才产生调用转换操作符方法的代码.

例如:

//implicit 关键字用于声明隐式的用户定义类型转换运算符。

public static implicit operator string(aaa table)

{

return table;

}  

// 像下面的代码就是正确的:

aaa var1;

string var2;  

var2=var1;//正确,可以隐式转换。

//explicit 关键字用于声明必须使用强制转换来调用的用户定义的类型转换运算符。

public static explicit operator aaa(string table)

{

return Convert(table);

}  

aaa var1;  

string var2;  

var1=var2; //错误,不可以隐式转换。

var1=(aaa)var2//正确,可以强制转换。

将一个类型的对象转换为另一个类型的对象。

隐式转换可能在各种情况下发生,包括功能成员调用,表达式执行和赋值。

显式转换可以在强制类型转换表达式中发生。  

用户定义的隐式转换应该被设计成不会抛出异常而且不会丢掉信息。

如果一个用户定义的转换将产生一个异常(例如因为源变量超出了范围)或丢掉信息(例如丢掉高位),那么这个转换应该被定义为一个显式转换。

原文地址:https://www.cnblogs.com/hao-1234-1234/p/6041083.html