当前位置:首页 >> 数学 >>

C#教学课件Chap2


C#数据类型 (续)

第2章

C#程序设计

2.3 数据类型在一定的条件下是可以相互转换的, C#允许使用两种转换方式: (1)隐式转换 (2)显式转换

2.3
?

隐式转换
隐式转换是系统默认的,不需要加以声明就可以进行转换。 在隐式转换过程中,编译器不需要对转换进行详细检查就能 安全地执行转换。

低精度数值类型—>高精度数值类型

?

隐式转换
目标类型 无信息丢失 ushort、short、uint、int、ulong、long、float、 double、decimal short、int、long、float、double、decimal int、long、float、double、decimal
精度可能会降低

源类型 byte sbyte short

ushort uint、int、ulong、long、float、double、 decimal int uint long ulong float long、double、decimal long、ulong、double、decimal decimal decimal double float float float、double float、double

char

ushort、uint、int、ulong、long、float、 double、decimal

2.3
?

隐式转换
转化形式:var1 = var2

long l; int i=10; l=i; //隐式转换 Console.WriteLine(“l={0}, i={1}”,l,i);
输出:l=10,i=10

?

隐式转换

using System; namespace P2_10 { class LossingConversionSample { public static void Main() { long l = long.MinValue; Console.WriteLine("l={0}",l); double d = l; //隐式转换 Console.WriteLine("d={0}",d); l = (long)d; //显式转换 Console.WriteLine("l={0}",l); Console.ReadLine(); } } }

低精度向高精度转换通常是安全的,但有时候也会发生信 息丢失,不是指数值的大小改变,而是数值的精度会降低

?

隐式转换

char类型与ushort类型存在一一对应关系。

char ch=?A?; ushort s=ch; int i=ch; Console.WriteLine(“ch={0}, s={1},i={2}”,ch,s,i); 输出: ch=A, s=65,i=65

2.3
?

显式转换
显式转换又叫强制类型转换,需要用户明确指定转换类型。 一般在不存在该类型的隐式转换时才使用。格式如下: var1 = (NewType)var2

高精度数值类型?低精度数值类型:显式转换 精度相同的有符号和无符号数值类型之间的转换:显式转换 数值类型 ?char类型:显式转换

?

显式转换
目标类型 sbyte、char

源类型 byte

sbyte
short ushort int unit long ulong float double char

byte、ushort、uint、ulong、char
byte、sbyte、ushort、char byte、sbyte、short、char byte、sbyte、short、ushort、uint、char byte、sbyte、short、ushort、int、char byte、sbyte、short、ushort、int、uint、ulong、char byte、sbyte、short、ushort、int、uint、long、char byte、sbyte、short、ushort、int、uint、long、ulong、char byte、sbyte、short、ushort、int、uint、long、ulong、char byte、sbyte、short

decimal byte、sbyte、short、ushort、int、uint、long、ulong、char

2.3
?

显式转换

var1 = (NewType)var2

byte b; short s= 10; b = s; //隐式转换?

Console.WriteLine(“b={0}, s={1}”, b, s);

2.3
?

显式转换

var1 = (NewType)var2 byte b; short s= 10; b =(byte) s; //显式转换

Console.WriteLine(“b={0}, s={1}”, b, s);

输出:b=10,s=10

2.3
?

显式转换

var1 = (NewType)var2 byte b; short s= 300; b =(byte) s; //显式转换

Console.WriteLine(“b={0}, s={1}”, b, s);

输出:b=44,s=300

//运行结果因溢出而出错!

2.3
?

显式转换

var1 = (NewType)var2 byte b; short s= 300; b =checked((byte) s); 检查表达式checked //显式转换 增加溢出

Console.WriteLine(“b={0}, s={1}”, b, s);

2.3
?

显式转换

2.3
?

显式转换

var1 = (NewType)var2 byte b; short s= 300; b =unchecked((byte) s); 出检查表达式checked //显式转换 增加溢

Console.WriteLine(“b={0}, s={1}”, b, s);

输出:b=44,s=300

//运行结果因溢出而出错!

2.3
?

枚举转换
?
?

隐式转换:把0直接赋给枚举类型的变量 显式转换
? ?

整数类型(包括字符类型)和实数类型<—>枚举类型 枚举类型<—>枚举类型

using System; namespace P2_12 { class EnumConversionSample { public static void Main() { Weekday day1=0; //隐式转换 Console.WriteLine(day1); day1=(Weekday)1; //显式转换 不能写成:day=1; Console.WriteLine(day1); day1=(Weekday)2.5F; //显式转换 Console.WriteLine(day1); Weekday day2; day2=(Weekday)day1; //显式转换 不能写成 day2=day; Console.WriteLine(day2); int i=(int)day2; //显式转换 Console.WriteLine(i); float f=(float)day2; //显式转换 Console.WriteLine(f); } } enum Weekday { Sun,Mon,Tue,Wed,Thu,Fri,Sat } }

?

枚举转换

?

Convert类

Convert类位于System命名空间中,主要用于将一个值类 型转换成另一个值类型,其语法格式: public sealed class Convert Convert类中用于实现类型转换的方法都是静态方法(静态方 法只能通过类名访问,不能通过类的实例访问),可通过 ”Convert.方法名(参数)“使用,常见方法如表所示:

?

Convert类
方法 说明 var转换为bool var转换为byte var转换为char var转换为DateTime var转换为Decimal var转换为Double

Convert.ToBoolean(var) Convert.ToByte(var) Convert.ToChar(var) Convert.ToDateTime(var) Convert.ToDecimal(var) Convert.ToDouble(var)

Convert.ToInt16(var) Convert.ToInt32(var) Convert.ToInt64(var)
Convert.ToSByte(var) Convert.ToSingle(var)

var转换为short var转换为int var转换为long
var转换为sbyte var转换为float

?

Convert类
方法 说明 var转换为string var转换为ushort var转换为uint var转换为ulong

Convert.ToString(var) Convert.ToUInt16(var) Convert.ToUInt32(var) Convert.ToUInt64(var)

?

Convert类

int i; string str = “123”; i = Convert.ToInt32(str ); Console.WriteLine(“str={0}, i={1}”, str, i); 输出: str=123, i=123

?

Convert类

int i; string str = “123dd”; i = Convert.ToInt32(str ); Console.WriteLine(“str={0}, i={1}”, str, i); 如果参数格式不符合要求,则引发参数格式异常 (FormatException)。

?

Convert类

?

Parse方法

C#中的很多类型(特别是值类型)都定义了字符串解析的基 本方法,这个方法就是Parse方法。 Parse方法是静态的,且返回值类型就是该方法所属的类型。 Parse方法只有一个String类型的参数
如:Boolean.Parse 方法 的定义如下: public static bool Parse( string value ) 如:Int32.Parse 方法的定义如下: public static int Parse( string s )

?

Parse方法
int a, b, sum; Console.Write("a="); a = int.Parse(Console.ReadLine()); Console.Write("b="); b = int.Parse(Console.ReadLine()); sum = a + b; Console.WriteLine("a+b={0}", sum); Console.ReadLine();

?

Parse方法

bool b=bool.Parse("True"); int i=int.Parse("5"); double d=double.Parse("2.5"); DateTime dt=DateTime.Parse("2011-9-12"); Console.WriteLine("b={0}, i={1}, d={2}, dt={3}", b, i, d, dt); Console.ReadLine();

?

Parse方法

如果参数格式不符合要求,则引发参数格式异常 (FormatException)。

?

TryParse方法

TryParse是Parse方法的替代方法,通常有两个参数,一个 表示要解析的字符串,而另一个是输出参数,用于存放解析结 果;方法返回一个布尔值,用于指示解析是否成功。 int x,y; int.TryParse(“5“,out x); //返回? x=? int.TryParse(“2.5”,out y); //返回? y=? double d; double.TryParse(“2.5”,out d); //返回? d=? DateTime dt1,dt2; DateTime.TryParse(“2011-9-12”,out dt1); //返回? DateTime.TryParse(“2011-9-31”,out dt2); //返回? Console.WriteLine(“x={0}, y={1}, d={2}, dt1={3},dt2={4}", x, y, d, dt1, dt2); Console.ReadLine();

?

TryParse方法

?

TryParse方法

TryParse可以提高程序的可靠性。 int x; Console.Write(“请输入整数x的值:”); while( ! int.TryParse(Console.ReadLine(),out x)) Console.WriteLine(“输入格式不正确!请重新输入x的 值”); …… 用户也可以为自定义的类型提供Parse和TryParse方法。

2.3
?

引用转换
?

?

?

?

引用转换包括类之间、接口之间、类与接口之 间、委托之间、数组之间的类型转换。 所有的引用转换都可以视为类之间以及类和接 口之间的转换。(为什么?) 任何引用转换都不会修改对象的内容,也不会 有信息的丢失。(为什么?) 引用转换也有隐式引用转换和显式引用转换两 种。

2.3
?

引用类型??引用类型
?
? ? ?

派生类型?基础类型:隐式转换 基础类型?派生类型:显式转换 空引用值Null可赋给任何一种引用类型的变量。 数组(A1?A2)
? ? ?

A1和A2维数相同 A1和A2的数组元素都是引用类型 存在从A1数组元素类型向A2数组元素类型的隐式(或显 式)引用转换。

2.4
?

值类型??引用类型
? ?

值类型?引用类型:隐式转换(装箱转换) 引用类型?值类型:显式转换(拆箱转换)
int i = 123; object o = i; //装箱可执行隐式或显式转换 int j = (int) o; //拆箱转换必须执行显式转换

i: 123 123

System.Int32 123

o
j:

System.objec t
System.Int32

装箱 拆箱

2.4

如果被拆箱的Object类型的值为空null,或者与目标值类型 冲突,拆箱转换都会失败,引发异常。
Object o=2.5 //装箱可执行隐式或显式转换 int i=(int)o; //拆箱转换必须执行显式转换 double d = (double) o; o
2.5

i:
d: 2.5

2.4

如果被拆箱的Object类型的值为空null,或者与目标值类型 冲突,拆箱转换都会失败,引发异常。
以下拆箱转换语句中,正确的有( A. Object o; int i=(int)o; B. Object o=10.5; int i=(int)o; C. Object o=10.5; float f=(float)o; D. Object o=10.5; float f=(float)(double)o; )?

本章小结
?

?

?

C#中的数据类型分为值类型和引用类型,其中值类型又 包括整数、布尔、实数、结构、枚举;引用类型则包括 类、接口、委托和数组。这些类型在.NET类库中都有相 应定义。值类型的变量总是直接包含自身的数据,而引 用类型的变量则指向实际数据的地址。 C#规定,在特定的值类型之间以及引用类型之间可进行 隐式或显式的类型转换。而装箱和拆箱转换则在值类型 和引用类型之间建立了联系,使得整个C#类型系统成为 一个有机的整体,从而能够以面向对象的方式来处理所 有数据类型。 除了显式和隐式转换外,C#提供了一些类和方法完成类 型之间的转换:Convert类,Parse和TryParse方法。


赞助商链接
相关文章:
kotler_chapter2
kotler_chapter2_计算机硬件及网络_IT/计算机_专业资料 暂无评价|0人阅读|0次下载|举报文档 kotler_chapter2_计算机硬件及网络_IT/计算机_专业资料。Chapter 2 ...
chap2中级宏观经济学答案 华中科技大学
chap2中级宏观经济学答案 华中科技大学 - Microeconomics, 4e (Perloff) Chapter 2 Supply and Demand 2.1 Demand 1) A...
Chap2 从C快速过渡到C++_图文
Chap2 从C快速过渡到C++_IT/计算机_专业资料。C++语言课件 Chap2 C++的变量、...C#操作字符串方法总结 3页 免费 第1章 由C到C++ 60页 免费 ©...
chap2 简单的凯恩斯模型(习题)
chap2 简单的凯恩斯模型(习题) - 第二章 简单的凯恩斯模型 一、名词解释 1、萨伊定律 2、 “两分法” 3、费雪方程 4、剑桥方程式 5、有效需求 6、消费函数...
计算理论习题答案CHAP2new
计算理论习题答案CHAP2new_计算机软件及应用_IT/计算机_专业资料。2.2 a. 利用语言 A={ambncn | m,n≥0}和 A={anbncm | m,n≥0}以及例 3.20,证 明...
课堂PPT内容:Chapter2:Translation Process
课堂PPT内容:Chapter2:Translation Process_文学_高等教育_教育专区。英语翻译讲义 Chapter 2: Process of Translation Process of Translation ?(1) Understanding ...
Homework Chapter 2
Homework Chapter 2_理学_高等教育_教育专区。《Computer Networks and Internet》 Chapter 2 1. Consider the following string of ASCII characters tha ...
Chapter 2 二_图文
2) Pair Practice Multimedia Set 教学方法 3) Group Practice 4) Role Play or Game 教学程序及内容: (OVERVIEW) Listen The chapter opener audio introduces ...
chap2 数值分析
chap2 数值分析_理学_高等教育_教育专区。简要介绍资料的主要内容,以获得更多的关注 第二章 插值法 1.当 x = 1, ?1, 2 时, f ( x ) = 0, ?3, 4...
bss08 chap2
bss08 chap2 - TMSG-BSS08 V1.0 第 二章 BSS 机柜 内部资料,不得外传 第二章 BSSC 机柜 1999 年 11 月 1 东方通信培训中心 内...
更多相关标签: