正在做一个小程序,要求是数据类型的转换
但是遇到瓶颈,bool类型转换到其他类型(除了char)是隐式转换?还是显式转换? 
          其他类型(除了char)转换成bool是隐式转换?还是显式转换?
在线求解!

解决方案 »

  1.   

    关键看你怎么转的了,如果是两个类型直接 = 赋值,就是隐式转换,你要通过convert等函数转换就是显式
      

  2.   


    object obj1 = 10; //隐式转换
    object obj2 = (object)10; //显式转换
      

  3.   


    这个不对哦。和函数无关,这里特指类型转换运算符。显式转换/隐式转换指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)不同。而前者很可能是程序员的疏忽。
      

  4.   

    总之,你要明白的一点是,隐式转换和显式转换从用途和目的上说没有什么不同,前者的目的是为了程序员的方便,后者的目的是,防止程序员犯错,让程序员用的时候明白地告诉编译器,我的确要转换。隐式转换也可以写成显式转换。我们打一个比喻:Word办公软件提供很多操作,比如允许你改变字体或者关闭程序。前者当你操作完了,立刻就执行了,后者则需要弹出一个对话框让你再确定一次。因为如果你无意执行了后者,那么不加提醒地执行,会导致严重的后果。这就类似隐式转换和显式转换。
      

  5.   

    bool相对于我们而言是“封闭的”,也就是说我们不能再直接重构它。其实稍微高级一点的程序设计更多地是使用自定义的类型支持转换。例如我在帖子
    http://bbs.csdn.net/topics/360039451
    中举了一个马和香蕉相互转换的例子。其中的代码var b = (马)a;你也可以写作马 b = a;可见“隐式还是显示”其实是一种语法糖,你在学习时需要了解内部机制,而在使用时则往往时随便选择一种可以编译通过的方式就好了(好在c#是强类型静态编程语言,而不是类似javascript那种无法在编译时给你检查出类型错误的所谓动态编程语言)。