这个不对哦。和函数无关,这里特指类型转换运算符。显式转换/隐式转换指C#的两种类型转换,前者指使用强制类型转换操作符进行的转换,后者指直接用等号操作符的转换。一个总的原则是,当数据类型的精度会受损的时候,一般需要用“显式转换”,避免程序员无意中的犯错。比如将double转换为int的时候,int i = (int)3.14;因为3.14转换为整数导致精度下降,所以用显式。反之,则不需要。比如int i = 3;double d = i;另外,C#不允许任何类型隐式转换为bool,同样是基于“避免程序员无意中的犯错”的原因。看下面的代码: 表达式 x = 1的值是1,因此可以写 y = x = 1或者Console.WriteLine(x = 1); 如果int可以隐式转化为bool,那么 if (x = 1) 就是一个合法表达式,显然,它和 if (x == 1)不同。而前者很可能是程序员的疏忽。
bool相对于我们而言是“封闭的”,也就是说我们不能再直接重构它。其实稍微高级一点的程序设计更多地是使用自定义的类型支持转换。例如我在帖子 http://bbs.csdn.net/topics/360039451 中举了一个马和香蕉相互转换的例子。其中的代码var b = (马)a;你也可以写作马 b = a;可见“隐式还是显示”其实是一种语法糖,你在学习时需要了解内部机制,而在使用时则往往时随便选择一种可以编译通过的方式就好了(好在c#是强类型静态编程语言,而不是类似javascript那种无法在编译时给你检查出类型错误的所谓动态编程语言)。
object obj1 = 10; //隐式转换
object obj2 = (object)10; //显式转换
这个不对哦。和函数无关,这里特指类型转换运算符。显式转换/隐式转换指C#的两种类型转换,前者指使用强制类型转换操作符进行的转换,后者指直接用等号操作符的转换。一个总的原则是,当数据类型的精度会受损的时候,一般需要用“显式转换”,避免程序员无意中的犯错。比如将double转换为int的时候,int i = (int)3.14;因为3.14转换为整数导致精度下降,所以用显式。反之,则不需要。比如int i = 3;double d = i;另外,C#不允许任何类型隐式转换为bool,同样是基于“避免程序员无意中的犯错”的原因。看下面的代码:
表达式 x = 1的值是1,因此可以写 y = x = 1或者Console.WriteLine(x = 1);
如果int可以隐式转化为bool,那么 if (x = 1) 就是一个合法表达式,显然,它和 if (x == 1)不同。而前者很可能是程序员的疏忽。
http://bbs.csdn.net/topics/360039451
中举了一个马和香蕉相互转换的例子。其中的代码var b = (马)a;你也可以写作马 b = a;可见“隐式还是显示”其实是一种语法糖,你在学习时需要了解内部机制,而在使用时则往往时随便选择一种可以编译通过的方式就好了(好在c#是强类型静态编程语言,而不是类似javascript那种无法在编译时给你检查出类型错误的所谓动态编程语言)。