C#的隐式转换和显示转换

1.C#是一门强类型的语言,在编译时就会进行类型检查。

隐式转换:通常就是由一个较小的类型范围向一个较大的类型范围转换。

比如:

int i = 10;
long l = i;

或者由子类转换为基类:

namespace Demo
{
    class Program
    {
        static void Main(string[] args)
        {
            c1 c1 = new c2();
            Console.WriteLine(typeof(c1));//Demo.c1
        }
    }
    class c1 { }
    class c2 : c1 { }
}

2.显示转换:通常是由较大的类型范围向较小的类型范围转换。

namespace 隐式转换和显示转换01
{
    class Program
    {
        static void Main(string[] args)
        {
            double d = 10.05;
            int iFromD = (int)d;
            Console.WriteLine(iFromD);//10
        }
    }
}

或者是由基类向子类转换:

c1 c11 = new c1();
c2 c22 = (c2)c11;
//编译可以通过,但是不能运行,因为不能强制将基类转换为子类

显示转换时,有时容易出现数据的丢失(从较大的数据类型范围转换为较小的类型范围)

3.C#中提供关键字is,可以判断某对象是否为某类型,可以先判断类型在决定是否要进行显示转换:

比如

Console.WriteLine(c11 is c1);//True
Console.WriteLine(c11 is c2);//False

同时提供了关键字as

c2 c22 = c11 as c2;
//as做的是和“强制类型转换”比较类似的工作,
//它把c11去转换为c2这个类型,但是当它发现无法进行类型转换时,它会返回一个null

但是as这个操作符必须用于“引用类型”或者是“可为空类型”。

3.通过方法进行类型转换:

实际中可以通过各种转换方法进行类型转换

string和int相互转换:

toString(),继承于Object类,所有Object类下的成员变量都能使用toString()方法,但是不同类型具体转换效果不同。

(1)

namespace string装换为int类型
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = Convert.ToInt32("100");
            //但是如果转换一个不能转换为int的字符串就会出错比如Convert.ToInt32("Hello")
            Console.WriteLine(a);//100
        }
    }
}

(2)或者使用Int32.Parse()方法

int a = Int32.Parse("100");

(3)Int32.TryParse()方法判断能否转换:

namespace string装换为int类型
{
    class Program
    {
        static void Main(string[] args)
        {
            int a;
            int b;
            bool succeed = Int32.TryParse("100", out a);
            bool wrong = Int32.TryParse("Hello", out b);
            Console.WriteLine(succeed);//True
            Console.WriteLine(a);//100
            Console.WriteLine(a.GetType());//System.Int32
            Console.WriteLine(wrong);//False
            Console.WriteLine(b);//0
        }
    }
}

TryParse会尝试着去转换,如果能够转换就返回true,并通过out传出转换后的值,如果不能返回false,通过out传出0

(4)也可以通过自定义接口方法进行自定义转换

feihu分享到:

          

You may also like...

Scroll Up