C#类型转换

·类型转换方式:【convert、(类型)变量名、as、隐式转换】四种方式

·【Convert :将一个基本数据类型转换为另一个基本数据类型。将实现IConvertible接口的自定义类型转换为任何基类型

·【(类型)变量名】:强制类型转换,会出异常,通常用于派生类的转换;

·【as 】:引用类型+null,不会抛异常(as本身有兼容性检查); 

·【隐式转换】:小的赋值给大的可以,大的赋给小的会报错;至于效率,能显示转换的转换,其他的隐式转换...

↓↓↓↓↓

Convert 方式说明:

  参考文献:

  1. DotNet Frameworkd的mscorlib.dll中定义的Convert类public static class Convert

  2. MSDN上的Convert说明:http://msdn.microsoft.com/zh-cn/library/system.convert(v=VS.100).aspx  

  图示说明:

    

     

  至于【实现 System.IConvertible 接口的 System.Object,或者为 null】

  这个可以参考MSDN上的说明--定义特定的方法,这些方法将实现引用或值类型的值转换为具有等效值的公共语言运行时类型。

  【http://msdn.microsoft.com/zh-cn/library/system.iconvertible.aspx#Y1247

eg.(摘自MSDN)
   double dNumber = 23.15;

   try {
    // Returns 23
    int    iNumber = System.Convert.ToInt32(dNumber);
   }
   catch (System.OverflowException) {
    System.Console.WriteLine(
       "Overflow in double to int conversion.");
   }
   // Returns True
   bool   bNumber = System.Convert.ToBoolean(dNumber);
   
   // Returns "23.15"
   string strNumber = System.Convert.ToString(dNumber);

   try {
    // Returns '2'
    char chrNumber = System.Convert.ToChar(strNumber[0]);
   }
   catch (System.ArgumentNullException) {
    System.Console.WriteLine("String is null");
   }
   catch (System.FormatException) {
    System.Console.WriteLine("String length is greater than 1.");
   }

   // System.Console.ReadLine() returns a string and it
   // must be converted.
   int newInteger = 0;
   try {
    System.Console.WriteLine("Enter an integer:");
    newInteger = System.Convert.ToInt32(
         System.Console.ReadLine());
   }
   catch (System.ArgumentNullException) {
    System.Console.WriteLine("String is null.");
   }
   catch (System.FormatException) {
    System.Console.WriteLine("String does not consist of an " +
        "optional sign followed by a series of digits.");
   }
   catch (System.OverflowException) {
    System.Console.WriteLine(
    "Overflow in string to int conversion.");
   }

   System.Console.WriteLine("Your integer as a double is {0}",
          System.Convert.ToDouble(newInteger));

注:

1.Convert.ToXXX()、(类型)变量名、int.Parse(Str) 这三种的原理还是不清楚,暂时无法判断效率,需要研究CLR,期待...继续学习

2.继承、接口、封装等概念还在起始阶段

板砖是激励,来的更猛烈些吧!

posted @ 2011-07-13 11:55  喜唬人  阅读(1443)  评论(5)    收藏  举报