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

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方法。


赞助商链接
相关文章:
chap2-1
C#chap2_1 23页 免费 chap2__传播(1) 55页 免费 TGH-HT-chap2-1 37页 免费 自控chap2_1 26页 2财富值 C#课件 chap2_1 23页 免费 Protel_chap2_1...
chap2部分作业答案
搜 试试 7 帮助 全部 DOC PPT TXT PDF XLS 百度文库 教育专区 高等教育 ...chap2 new 47页 免费 高等传热学课件对流部分... 32页 免费 C#chap2_1 23...
模具教案自制(chap2.3)
教案授课 形式 授课 时数 新授 授课日期 年 月 日第 周 2 Chap2 冲裁...多媒体课件教学视频 1、复习本课内容 2、完成 P49 习题 6 基本能分清主要...
chap2 电视消息讲义
chap2 电视消息讲义 隐藏>> 2-1 第二章 电视新闻消息评析 第一节 电视新闻消息的基本知识 一、电视消息的定义 消息是一种迅速及时、简明扼要地报道新闻事实的体...
Chap2 Exercise1
Chapter Two Exercises 一、Exercises: (1) Which is the illegal variable names ? A. Lad B. n_10 C. _567 D. g#k (2) Which is the legal variabl...
Chapter 2.ppt.Convertor
Chapter 2.ppt.Convertor_经济学_高等教育_教育专区。CHAPTER 2 Tracks and Fields Unit 1-4 1 Unit 1 Running 跑步 Part 1 Words and Expressions abreast ...
Chap2_Subjective
搜试试 3 帮助 全部 DOC PPT TXT PDF XLS ...Chap2_Subjective_IT认证_资格考试/认证_教育专区。...虚拟语气课件(公开课)su... 38页 2下载券 subjective...
maths_1_chap2_concept_de_base法语数学课件2
maths_1_chap2_concept_de_base法语数学课件2 隐藏>> Chapitre 2 : Concept de Base I) La population On appel population, l’ensemble des références sur...
chap2复习
chap2复习_理学_高等教育_教育专区。信号Convolution sum representation for the response of a discrete-time LTI systems; Convolution integral representation for ...
Chap2 阶段练习
搜 试试 帮助 全部 DOC PPT TXT PDF XLS ...c#习题chap2 4页 1财富值 chap2习题解答 9页 2...12页 2财富值如要投诉违规内容,请到百度文库投诉中心...
更多相关标签: