C#语言之数据类型.ppt

上传人:牧羊曲112 文档编号:6502417 上传时间:2023-11-07 格式:PPT 页数:66 大小:439.50KB
返回 下载 相关 举报
C#语言之数据类型.ppt_第1页
第1页 / 共66页
C#语言之数据类型.ppt_第2页
第2页 / 共66页
C#语言之数据类型.ppt_第3页
第3页 / 共66页
C#语言之数据类型.ppt_第4页
第4页 / 共66页
C#语言之数据类型.ppt_第5页
第5页 / 共66页
点击查看更多>>
资源描述

《C#语言之数据类型.ppt》由会员分享,可在线阅读,更多相关《C#语言之数据类型.ppt(66页珍藏版)》请在三一办公上搜索。

1、第二讲 C#语言之数据类型之二,3.1 值类型3.2 引用类型3.3 类型转换,第3章 C#语言之数据类型,3.2.1类3.2.2接口3.2.3代表3.2.4数组,3.1 C#数据类型之引用类型,类,1、类的定义:类是一组具有相同数据结构和相同操作的对象的集合。简单地说:类是对一系列具有相同性质的对象的抽象。,3.2.1类,3.2 C#数据类型之引用类型,2、举例:现实中的类,车、人,抽象的概念和继承的概念,特性、方法、事件等概念简介。,类,3.2.1类,3、C中的类:类也是一种数据类型,或称它为类类型。,3.2 C#数据类型之引用类型,4、类的构成:类由成员构成,这些成员包括:常数字段方法属

2、性事件索引器运算符实例构造函数析构函数静态构造函数和嵌套类型声明,类,3.2.1类,5、类的声明:书上的例子(p3_6),3.2 C#数据类型之引用类型,public class Contactpublic string m_name;public int m_age;public string m_telephone;public struct Addresspublic string m_city;public string m_street;public int m_number;public Address m_address;,类,3.2.1类,3.2 C#数据类型之引用类型,cla

3、ss Contactpublic string m_name;public int m_age;public string m_telephone;public struct Addresspublic string m_city;public string m_street;public int m_number;public Address m_address;,6、类变量及实例化,Contact c1=new Contact();,类,3.2.1类,7、类的成员赋值,3.2 C#数据类型之引用类型,class Contactpublic string m_name;public int

4、m_age;public string m_telephone;public struct Addresspublic string m_city;public string m_street;public int m_number;public Address m_address;,class ClassSample public static void Main()Contact c1=new Contact();c1.m_name=Mike Owen;c1.m_age=24;c1.m_telephone=Unknown;c1.m_address.m_city=利物浦;c1.m_addre

5、ss.m_street=安菲尔德;c1.m_address.m_number=10;Console.WriteLine(c1.m_address.m_city);Console.WriteLine(c1.m_address.m_street);Console.WriteLine(c1.m_address.m_number);,类,3.2.1类,8、类继承的声明,3.2 C#数据类型之引用类型,class Contactpublic string m_name;public int m_age;public string m_telephone;public struct Addresspubl

6、ic string m_city;public string m_street;public int m_number;public Address m_address;,class Colleague:Contactpublic string m_Fax;,总结一下:类的继承如何定义,类,3.2.1类,8、类继承的单继承,3.2 C#数据类型之引用类型,class Contact.class Contact1.,class Colleague:Contact,Contact1public string m_Fax;,错啦?,接口,面向组件的开发-组件编程技术,3.2.2接口,3.2 C#数据

7、类型之引用类型,接口,接口,面向组件的开发-组件编程技术,接口,组件与接口:1、接口描述了组件对外提供的服务。2、在组件和组件之间、组件和客户之间都是通过接口进行交互的。,接口,接口的特点:1、组件接口必须是能够自我描述的。这意味着组件接口应该不依赖于具体的实现,将实现和接口分离,彻底消除了接口的使用者和接口的实现者之间的耦合关系,增强了信息的封装程度。同时,这也要求组件接口必须使用一种与组件实现无关的语言。目前组件接口的描述标准是IDL语言。2、尽可能地保持接口不变。由于接口是组件之间的协议,因此组件的接口一旦被发布,组件生产者就应该尽可能地保持接口不变,任何对接口语法或语义上的改变,都有可

8、能造成现有组件与客户之间的联系遭到破坏。3、每个组件都是自主的,有其独特的功能,只能通过接口与外界通信。当一个组件需要提供新的服务时,可以通过增加新的接口来实现,不会影响原接口已存在的客户,而新的客户可以重新选择新的接口来获得服务。,接口,接口的声明:interfaceinterface IControlvoid Paint();,using System;interface IControlvoid Paint();interface ITextBox:IControlvoid SetText(string text);interface IListBox:IControlvoid SetI

9、tems(string items);interface IComboBox:ITextBox,IListBox,总结一下:接口如何定义,接口也有继承?接口的继承如何定义,接口,类继承与接口:,interface ITelephone void DialNumber();interface IFax:ITelephone void SendFax();void ReceiveFax();class Contact:ITelephone.class Colleague:Contact,IFax.,谁来总结一下?,接口,类继承与接口:总结:一个正例,class Contact:ITelephone

10、 public void DialNumber().class Colleague:Contact,IFax public void SendFax().public void ReceiveFax().,interface ITelephone void DialNumber();interface IFax:ITelephone void SendFax();void ReceiveFax();,总结!一个正例,代表,1、定义2、为什么引入代表。3、继续保留指针(细致入微的考虑)4、类型安全的代表5、代表相当于一类方法(函数)的指针6、代表的使用:一般步骤及例子分析7、代表的使用步骤进一步

11、的分析8、代表与事件9、真正的例子,代表,1、代表(delegate),也有的书将它翻译成委托,也有的翻译成代理,它才是C#新引进的新概念之一,也是最有特色的最为强大的功能之一。,2、C#引入代表(delegate)就是为了解决C和C+中指针滥用所带来的危害。可以这样说,一个地道的C#程序员,完全可以不用指针就能完成C和C+中使用指针所能完成的任务。,3、当然,若您恋恋不舍指针,甚至没有指针时就不知如何编程,没有关系,C#还是还会忘记您的。,代表,4、与指针不同,代表在C#是类型安全的:强类型,5、代表:与C、C+相比,代表相当于一类方法(函数)的指针,但仍有很大的差别。,C语言中,指向函数的

12、指针:main()int max(int,int);int(*p)();int a=6,b=7,c=0;p=max;c=(*p)(a,b),代表:相当于一类方法的指针的类型,代表,6、代表的使用分为三个步骤:定义实例化调用,代表,6、代表的使用分为三个步骤:定义、实例化、调用,代表的定义:public delegate int D1(string text);public delegate void D2();,C语言中,指向函数的指针:main()int max(int,int);int(*p)();int a=6,b=7,c=0;p=max;c=(*p)(a,b);,仔细注意:它有参数表。

13、,代表,6、代表的使用分为三个步骤:定义、实例化、调用,代表的定义:public delegate int Delgate1(string text);public delegate void Delgate2();,仔细注意:它有参数表。,语义是什么?,代表,6、代表的使用分为三个步骤:定义、实例化、调用,代表的定义:public delegate int Delgate1(string text);public delegate void Delgate2();,仔细注意:它有参数表。,代表的实例化:Delgate1 d1=new Delgate1(ClassA.DialNumber);D

14、elgate2 d2=new Delgate2(ClassB.M1);,呀?代表的实例化?有点怪呀!,代表,6、代表的使用分为三个步骤:定义、实例化、调用,代表的定义:public delegate int Delgate1(string text);public delegate void Delgate2();,代表的实例化:Delgate1 d1=new Delgate1(ClassA.DialNumber);Delgate2 d2=new Delgate2(ClassB.M1);,语义:public ClassA()int DialNumber(string str),仔细注意:它有参

15、数表。,仔细注意:它有参数表。,语义是什么?,代表,6、代表的使用分为三个步骤:定义、实例化、调用,代表的定义:public delegate int Delgate1(string text);public delegate void Delgate2();,代表的实例化:Delgate1 d1=new Delgate1(ClassA.DialNumber);Delgate2 d2=new Delgate2(ClassB.M1);,代表的调用:public ClassA()Delgate1 d1=new Delgate1(DialNumber);int x;string s=“abcd”;x

16、=d1(s);,代表的调用,public delegate void TelDelegate();public delegate void FaxDelegate(string Text);public class DelegateSample public static void Main()Contact c1=new Contact();Colleague c2=new Colleague();TelDelegate td=new TelDelegate(c1.DialNumber);td();FaxDelegate fd=new FaxDelegate(c2.SendFax);fd(H

17、ello);fd=new FaxDelegate(c2.ReceiveFax);fd(This is a fax From Shanghai);,class Contact:ITelephone public void DialNumber().class Colleague:Contact,IFax public void SendFax(string text).public void ReceiveFax(string text).,代表,8、代表与事件:事件驱动编程,7、代表的使用分为三个步骤:再思考定义实例化调用,谁来定义:程序员?系统?,public delegate void E

18、ventHandler(object sender,System.EventArgs e);public class Button public event EventHandler Click;public void Reset()Click=null;,事件!,代表,8、代表与事件:事件驱动编程,using System;public class Form1 public Form1()Button1.Click+=new EventHandler(Button1_Click);Button Button1=new Button();void Button1_Click(object se

19、nder,EventArgs e)Console.WriteLine(Button1 was clicked!);public void Disconnect()Button1.Click-=new EventHandler(Button1_Click);,public delegate void EventHandler(object sender,System.EventArgs e);public class Button public event EventHandler Click;public void Reset()Click=null;,代表,9、真正的代表(delegate)

20、例子(实例方法和表态方法的代理),using System;namespace Mydelegate_Sample1 public delegate int MyDelegate();/声明一个代表 public class MyClass public int InstanceMethod()Console.WriteLine(调用实例方法。);return 5;public static int StaticMethod()Console.WriteLine(调用静态方法。);return 0;public class Test static public void Main()MyCla

21、ss p=new MyClass();MyDelegate d=new MyDelegate(p.InstanceMethod);d();/调用非静态方法 d=new MyDelegate(MyClass.StaticMethod);d();/调用静态方法 Console.ReadLine();,代表,10、实验:分析、运行和改进p3_8例子,3.2.4数组,3.2 C#数据类型之值类型,C#中的数组,希望大家自学一下,3.2.4数组,3.2 C#数据类型之值类型,自学要点提示:,数组是一种什么数据类型:定义、特点、应用与C、C+、JAVA数组的异同点(申明、初始化、引用等)它的基类、主要属性

22、、方法多维数组的特点新概念:不规则数组,也叫锯齿形数组,也叫“交错形数组”,它的特殊作用。不要把交错形数组与多维数组弄混。多维数组是维数大于的数组,而交错形数组是元素是数组的数组。分析P3-10的例子,改进它。,3.2.4数组,3.2 C#数据类型之值类型,多维数组,要点:多维数组,int array1;char,carr;char,carr,cabc;,Object,arr_Obj;Contact,Contacts;,数组的元素类型:值类型,数组的元素类型:Contact是类,3.2.4数组,3.2 C#数据类型之值类型,多维数组,要点:多维数组,int array1;char,carr;c

23、har,carr,cabc;,Object,arr_Obj;Contact,Contacts;,秩说明符,维度分隔符,3.2.4数组,3.2 C#数据类型之值类型,2、数组初始化,要点:初始化,int,MyArray=new int,1,2,3,4,5,6,7,8;,也可以初始化数组但不指定级别:char MyCharArray=M,y,C,h,a,r,A,r,r,a,y;int MyIntArray=1,2,3,12,45,-1;int,myArray=1,2,3,4,5,6,7,8;,3.2.4数组,3.2 C#数据类型之值类型,3、数组元素访问,要点:元素访问,using System;

24、class Test static void Main()int arr=new int5;for(int i=0;i arr.Length;i+)/通过Length访问数组的元素个数 arri=i*i;/数组初绐化,每一个元素的值是其下标值的平方数。for(int i=0;i arr.Length;i+)/遍历Console.WriteLine(arr0=1,i,arri);,3.2.4数组,3.2 C#数据类型之值类型,3、数组元素访问,要点:元素访问,using System;class Test static void Main()int arr=new int5;for(int i=

25、0;i arr.Length;i+)/通过Length访问数组的元素个数 arri=i*i;/数组初绐化,每一个元素的值是其下标值的平方数。for(int i=0;i arr.Length;i+)/遍历Console.WriteLine(arr0=1,i,arri);,arr0=0arr1=1arr2=4arr3=9arr4=16,3.2.4数组,3.2 C#数据类型之值类型,要点:不规则元素访问,class MultiArray public static void Main()int b=new int3;b0=new int4;b1=new int5;b2=new int4;Consol

26、e.WriteLine(不规则数组:);Console.WriteLine(b.Length);Console.WriteLine(b.GetLength(0);/调用将会出错:Console.WriteLine(b.GetLength(1);Console.WriteLine(b0.Length);,3.2.4数组,3.2 C#数据类型之值类型,public static void Main()int b=new int3;b0=new int4;b1=new int5;b2=new int4;Console.WriteLine(不规则数组:);Console.WriteLine(b.Len

27、gth);Console.WriteLine(b.GetLength(0);/调用将会出错:Console.WriteLine(b.GetLength(1);Console.WriteLine(b0.Length);for(int i=0;i b.Length;i+)Console.WriteLine(bi.Length);,要点:不规则元素访问,3.2.4数组,3.2 C#数据类型之值类型,数组是一种什么数据类型:定义、特点、应用与C、C+、JAVA数组的异同点(申明、初始化、引用等)它的基类、主要属性、方法多维数组的特点新概念:不规则数组,也叫锯齿形数组,也叫“交错形数组”,它的特殊作用。

28、不要把交错形数组与多维数组弄混。多维数组是维数大于的数组,而交错形数组是元素是数组的数组。分析P3-10的例子,改进它。,要点:多维数组,类型转换,3.3 类型转换,隐式转换,显式转换(强制类型转换),隐式数值转换隐式枚举转换隐式引用转换隐式常量表达式转换转换,显式数值转换显式枚举转换显式引用转换,类型转换,3.3 类型转换,3.3.1数值转换3.3.2枚举转换3.3.3引用转换3.3.4装箱和拆箱转换3.3.5转换检查,数值转换,3.3.1数值转换,1、隐式数值转换:,3.3 类型转换,数值转换枚举转换引用转换装箱和拆箱转换转换检查,int i=10;long X=i;,byte x=16;

29、ushort y=x;y=65535;float z=y;,数值转换,3.3.1数值转换,1、隐式数值转换:,3.3 类型转换,数值转换枚举转换引用转换装箱和拆箱转换转换检查,using System;class Testpublic static void Main()byte x=16;Console.WriteLine(x=0,x);ushort y=x;Console.WriteLine(y=0,y);y=65535;Console.WriteLine(y=0,y);float z=y;Console.WriteLine(z=0,z);,程序的输出将是:x=16;y=16;y=6553

30、5;z=65535;,数值转换,3.3.1数值转换,1、显示式数值转换:,3.3 类型转换,数值转换枚举转换引用转换装箱和拆箱转换转换检查,int i=10;long l=(long)i;,long l=5000;int i=(int)l;,数值转换,3.3.1数值转换,1、隐式数值转换:特点是从小类型到大类型转换,都会成功,但可能会引起精度下降。,2、显式数值转换:特点是不能保证总是转换成功,可能会发生信息丢失。,3.3 类型转换,数值转换枚举转换引用转换装箱和拆箱转换转换检查,1、枚举类型的隐式转换,3.3 类型转换,数值转换枚举转换引用转换装箱和拆箱转换转换检查,3.3.2枚举转换,0与

31、枚举类型变量的隐式转换。,枚举转换,0与枚举类型变量的隐式转换。,public enum Weekday Sunday,Monday=3,Tuesday=5,Wednesday=7 class MultiArray public static void Main()Weekday day=0;Console.WriteLine(day);,3.3 类型转换,数值转换枚举转换引用转换装箱和拆箱转换转换检查,3.3.2枚举转换,运行结果:Sunday,枚举转换,1、0与枚举类型变量的隐式转换。补充:只有一个序号为0,或是默认状态的情况下这一条才成立。,public enum Weekday Sun

32、day=1,Monday=3,Tuesday=5,Wednesday=7public class MultiArray public static void Main()Weekday day=0;Console.WriteLine(day);,3.3 类型转换,数值转换枚举转换引用转换装箱和拆箱转换转换检查,3.3.2枚举转换,运行结果:0,枚举转换,3.3 类型转换,数值转换枚举转换引用转换装箱和拆箱转换转换检查,3.3.2枚举转换,从sbyte,byte,short,ushort,int,uint,long,ulong,char,float,double,或decimal到任何枚举类型;

33、从任何枚举类型到 sbyte,byte,short,ushort,int,uint,long,ulong,char,float,double,或decimal;从任何枚举类型到任何其它枚举类型;,2、显式枚举转换包括以下内容,枚举转换,3.3 类型转换,数值转换枚举转换引用转换装箱和拆箱转换转换检查,3.3.2枚举转换,public enum Weekday Sunday,Monday,Tuesday,Wednesday public class EnumConversion static void Main(string args)Weekday day=0;Console.WriteLin

34、e(day);day=(Weekday)1;/错误的写法:day=1;Console.WriteLine(day);,枚举转换,3.3 类型转换,数值转换枚举转换引用转换装箱和拆箱转换转换检查,3.3.2枚举转换,枚举转换,public enum Weekday Sunday,Monday,Tuesday,Wednesdaypublic class EnumConversion static void Main(string args)Weekday day=0;int x;Console.WriteLine(day);day=(Weekday)1;/错误的写法:day=1;Console.W

35、riteLine(day);day+;Console.WriteLine(day);x=(int)day;Console.WriteLine(x);,SundayMondayTuesday2,引用转换,1、隐式引用转换。,隐式引用转换有如下几个情形:从任何引用类型到对象类型object的转换;从类类型S到类类型T的转换,只要S是T的派生类;从类类型S到接口类型T的转换,只要类S实现了接口T;从接口类型S到接口类型T的转换,其中S是T的中派生的;从元素类型为Ts 的数组类型S向元素类型为Tt的数组类型T转换,这种转换需要满足下列条件:S 和T 只有元素的数据类型不同但它们的维数相同;Ts 和Tt

36、 都是引用类型存在从Ts 到Tt 的隐式引用转换;从任何数组类型到System.Array的转换;从任何代表类型到System.Delegate的转换;从任何数组类型或代表类型到System.ICloneable的转换;从空类型null到任何引用类型的转换;,3.3 类型转换,数值转换枚举转换引用转换装箱和拆箱转换转换检查,3.3.3引用转换,2、显式引用转换。,显式引用转换包括:从object到任何引用类型;从类类型S到类类型T,其中S 是T 的基类;从类类型S到接口类型T,其中S不是密封类,而且没有实现T;从接口类型S到类类型T,其中T不是密封类,而且没有实现S;从接口类型S到接口类型T,

37、其中S不是T的子接口;从元素类型为Ts的数组类型S到元素类型为Tt的数组类型T的转换,这种转换需要满足下列条件:S和T只有元素的数据类型不同,但维数相同;Ts和Tt都是引用类型;存在从Ts到Tt的显式引用转换;从 System.Array到数组类型;从System.Delegate到代表类型;从System.ICloneable到数组类型或代表类型;显式引用转换发生在引用类型之间,需要在运行时检测以确保正确。为了确保显式引用转换的正常执行,要求源变量的值必须是null或者它所引用的对象的类型可以被隐式引用转换转换为目标类型。否则显式引用转换失败将抛出一个无效类型转换(InvalidCastEx

38、ception)异常。,3.3 类型转换,数值转换枚举转换引用转换装箱和拆箱转换转换检查,3.3.3引用转换,引用转换,值类型与引用类型的转换,3.3.4装箱和拆箱,3.3 类型转换,C#语言类型系统提出的两个核心概念,装箱(boxing)拆箱(unboxing),装箱和拆箱,3.3.4装箱和拆箱,装箱和拆箱机制:使得在C#类型系统中任何值类型、引用类型和object对象类型之间进行转换。我们称这种转化为绑定连接。简单地说:有了装箱和拆箱的概念,对任何类型的值来说,最终我们都可以看作是object 类型。,3.3 类型转换,C#语言类型系统提出的一个核心概念装箱(boxing)和拆箱(unbo

39、xing)。,装箱和拆箱,3.3.4装箱和拆箱,public class BoxingSample static void Main()int i=10;object obj=i;/Boxing i=20;Console.WriteLine(值类型int:i=0,i);Console.WriteLine(引用类型object:obj=0,obj);,3.3 类型转换,值类型int:i=20引用类型object:obj=10,装箱(boxing),装箱和拆箱,3.3.4装箱和拆箱,public class BoxingSample static void Main()int i=10;objec

40、t obj=i;/Boxing i=20;Console.WriteLine(值类型int:i=0,i);Console.WriteLine(引用类型object:obj=0,obj);,3.3 类型转换,装箱(boxing),装箱转换是指将一个值类型隐式地转换成一个object 类型,或者把这个值类型转换成一个被该值类型应用的接口类型(interface-type)。把一个值类型的值装箱就是创建一个object实例,并将这个值复制给这个object。,装箱和拆箱,3.3.4装箱和拆箱,public class BoxingSample class UnboxingSample static

41、void Main()object obj=10;int i=(int)obj;i=20;Console.WriteLine(引用类型object:obj=0,obj);Console.WriteLine(值类型int:i=0,i);,3.3 类型转换,引用类型object:obj=10值类型int:i=20,拆箱(unboxing),装箱和拆箱,3.3.4装箱和拆箱,3.3 类型转换,拆箱转换是指将一个对象类型显式地转换成一个值类型,或是将一个接口类型显式地转换成一个执行该接口的值类型。,拆箱(unboxing),public class BoxingSample class Unboxin

42、gSample static void Main()object obj=10;int i=(int)obj;i=20;Console.WriteLine(引用类型object:obj=0,obj);Console.WriteLine(值类型int:i=0,i);,装箱和拆箱,3.3.4装箱和拆箱,3.3 类型转换,1、检查这个对象实例,看它是否为给定的值类型的装箱值。2、把这个实例的值拷贝给值类型的变量。,拆箱(unboxing),class UnboxingSample static void Main()object obj=10;int i=(int)obj;i=20;Console.

43、WriteLine(引用类型object:obj=0,obj);Console.WriteLine(值类型int:i=0,i);,拆箱的过程分为两步:,3.3.5用户定义转换,3.3 类型转换,用户定义转换,1、用户定义隐式转换,2、用户定义显示转换,3.3.6转换检查,3.3 类型转换,转换检查,转换异常的处理,上机习题,3.3 类型转换,上机习题,1、运行书上的例子。2、将P3_8按拆分,重新组织,并定义和实现新的代表。3、建立一个不规则的数组,将每一个元素输出。4、实现显式和隐式数值转换,试验溢出的情况5、实现显式和隐式枚举转换,将weekday的所有元素分别按数值、符号输出。6、实现显式和隐式的引用转换,熟悉VS2005环境,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号