C#类型转换

C# 类型转换

类型转换从根本上说是类型铸造,或者说是把数据从一种类型转换为另一种类型。在 C# 中,类型铸造有两种形式:

  • 隐式类型转换 - 这些转换是 C# 默认的以安全方式进行的转换, 不会导致数据丢失。例如,从小的整数类型转换为大的整数类型,从派生类转换为基类。
  • 显式类型转换 - 显式类型转换,即强制类型转换。显式转换需要强制转换运算符,而且强制转换会造成数据丢失。

隐式类型转换就是系统自己进行的转换,不需要特地去转换

 double d = 5.18;
            int i = 1;
            //d是double类型,要与int类型的i相加,系统会将i隐式转换成double类型,结果也是double类型
            //输出6.18
            Console.WriteLine(d+i);
            //这里不会丢失精度 所以不需要显式转换而是使用隐式转换
            d=i;
            Console.WriteLine(d);

显示类型转换就是需要手动标识转换的类型,并且会丢失精度

            //强制类型转换,丢失精度
            d = 6.18;
            i = (int)d;
            //输出6
            Console.WriteLine(i);

 

类型转换使用场景

  •  父类引用需要调用子类特有的方法
  •  图个方便或特殊需要

向下类型转换

{ 
 Pen p = new MarkerPen();
            p.draw();
            //父类向下转型使用子类方法
            //即使是父类也应该确保引用指向的是要转换的子类
            MarkerPen mp = (MarkerPen)p;
            mp.setColor("White");
            mp.drawColor();
        }
        //MarkerPen继承于Pen
        class MarkerPen : Pen
        {
            private String color = "red";
            public void setColor(String c)
            {
                this.color = c;
            }
            public void drawColor()
            {

                Console.WriteLine($"I draw in {color} color.");
            }
        }
        class Pen
        {
            public void draw()
            {
                Console.WriteLine("I draw in black color.");
            }
        }

代码中包含了Pen类和继承于Pen类的MarkerPen类

其中

Pen p = new MarkerPen();

声明了父类的引用指向子类的实现类

但是却不能使用子类的方法(一杆马克笔确实是一支笔,但他只是一支笔的话便无法画出颜色)

所以需要向下强制转换类型才能使用子类方法(马克笔是马克笔的时候便能画出颜色)

也就是说是谁的引用便能调用谁的方法

取整

这里这是举一个强制转换的使用例子

 float  f= 6.18f;
            //会直接输出float的整数部分6 算是利用了丢失精度这一点
            Console.WriteLine((int)f);

 

C# 类型转换方法

C# 提供了下列内置的类型转换方法:

序号方法 & 描述
1 ToBoolean
如果可能的话,把类型转换为布尔型。
2 ToByte
把类型转换为字节类型。
3 ToChar
如果可能的话,把类型转换为单个 Unicode 字符类型。
4 ToDateTime
把类型(整数或字符串类型)转换为 日期-时间 结构。
5 ToDecimal
把浮点型或整数类型转换为十进制类型。
6 ToDouble
把类型转换为双精度浮点型。
7 ToInt16
把类型转换为 16 位整数类型。
8 ToInt32
把类型转换为 32 位整数类型。
9 ToInt64
把类型转换为 64 位整数类型。
10 ToSbyte
把类型转换为有符号字节类型。
11 ToSingle
把类型转换为小浮点数类型。
12 ToString
把类型转换为字符串类型。
13 ToType
把类型转换为指定类型。
14 ToUInt16
把类型转换为 16 位无符号整数类型。
15 ToUInt32
把类型转换为 32 位无符号整数类型。
16 ToUInt64
把类型转换为 64 位无符号整数类型。

下面的实例把不同值的类型转换为字符串类型:

实例

namespace TypeConversionApplication
{
    class StringConversion
    {
        static void Main(string[] args)
        {
            int i = 75;
            float f = 53.005f;
            double d = 2345.7652;
            bool b = true;

            Console.WriteLine(i.ToString());
            Console.WriteLine(f.ToString());
            Console.WriteLine(d.ToString());
            Console.WriteLine(b.ToString());
            Console.ReadKey();
           
        }
    }
}

 

当上面的代码被编译和执行时,它会产生下列结果:

75
53.005
2345.7652
True

 

posted @ 2020-07-29 21:00  虚青海  阅读(151)  评论(0编辑  收藏  举报