C# 转换

来源:互联网 发布:剑三丐姐捏脸数据邪魅 编辑:程序博客网 时间:2024/05/29 03:44
一、 转换(conversion)是接受一个类型的值并使它作为另一个类型的等价值的过程。 转换后的值应和原值一样的,但它是目标类型。二、 隐式转换 简单来说 端类型转换为长类型 不会丢失数据或精度,在这种情况下 语言自动做这些转换 叫做隐式转换三、 强制转换 对于源类型的任意值在被转换成目标类型时发生丢失的情况 语言不会自动转换,          如果希望对这样的类型进行转换 必须使用显式转换 叫做强制转换表达式四、 溢出检测上下文 类型转换时 检测结果溢出的能力,通过checked运算符和checked语句来实现     代码片段是否被检查 称作溢出检测上下文         如果我们指定一个表达式或一段代码为checked,CLR(公共语言运行时)会在转换产生溢出时抛出一个OverflowExecption异常         如果代码不是checked,转换会继续而不管是否产生溢出     默认的溢出检测上下文不是checked
    class Program    {        static void Main(string[] args)        {            //UncheckedAndChecked.Unchecked();            QuoteConversion.QConversion();            Console.ReadKey();        }    }    class UncheckedAndChecked    {        public static void Unchecked()        {            ushort sh = 2000;            byte sb;            // unchecked和 checked 表达式 控制的是一个表达式            sb = unchecked((byte)sh);         // 不做溢出检测,丢失位不发出警告,unchecked 可以省略 sb = (byte)sh;             Console.WriteLine("sb:{0}", sb);            sb = checked((byte)sh);           // 使用checked表达式,丢失位发出警告   检测出溢出 并抛出OverflowException异常            Console.WriteLine("sb:{0}", sb);            // unchecked和 checked 语句 语句控制的是一段代码块              unchecked            {                sb = (byte)sh;   // 不做溢出检测,丢失位不发出警告                Console.WriteLine("sb:{0}", sb);                checked                {                    sb = (byte)sh;          // 使用checked语句 ,丢失位发出警告  检测出溢出 并抛出OverflowException异常                    Console.WriteLine("sb:{0}", sb);                }            }            // unchecked和checked 语句 和表达式执行的功能一样        }    }    // 引用转换    class First    {        public int Field1=1;    }    class Second : First      // Second 继承First 是First 的扩展    {        public int Field2=2;    }    class QuoteConversion    {        public static void QConversion()        {            Second se = new Second();   // se 是Second的对象            First fi = (First)se;   // fi 是First类型的对象  (First)可以不写 因为First 是Second的基类 语言已经为我们做了隐式转换            Console.WriteLine("{0}", fi.Field1);            // fi 指向的是 First类型数值的内存 se指向的是Second类型数值的内存 Second内包含First 所以First以外的内存fi不可见            //Console.WriteLine("{0}", fi.Field2);  // fi 调用不到Field2  Field2对于fi 不可见            Console.WriteLine("{0}", se.Field1);            Console.WriteLine("{0}", se.Field2);        }    }
五、 隐式引用转换  所有的引用类型可以被隐式转换Object类型  任何类型可以隐式转换到它继承的接口  类可以隐式转换到:它继承的任何类,它实现的任何接口六、 显式引用转换  从Object到任何引用类型的转换  从基类到派生类的转换 有效的显式引用转换  1、自动进行了隐式转换  2、源引用的是null 例如:       First fi = null;      Second se = (Second)fi;  // 允许转换,因为fi 为空
0 0
原创粉丝点击