欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    C#语言之数据类型.ppt

    • 资源ID:6502417       资源大小:439.50KB        全文页数:66页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    C#语言之数据类型.ppt

    第二讲 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、类的构成:类由成员构成,这些成员包括:常数字段方法属性事件索引器运算符实例构造函数析构函数静态构造函数和嵌套类型声明,类,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#数据类型之引用类型,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;,6、类变量及实例化,Contact c1=new Contact();,类,3.2.1类,7、类的成员赋值,3.2 C#数据类型之引用类型,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;,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_address.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 Addresspublic 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#数据类型之引用类型,接口,接口,面向组件的开发-组件编程技术,接口,组件与接口:1、接口描述了组件对外提供的服务。2、在组件和组件之间、组件和客户之间都是通过接口进行交互的。,接口,接口的特点:1、组件接口必须是能够自我描述的。这意味着组件接口应该不依赖于具体的实现,将实现和接口分离,彻底消除了接口的使用者和接口的实现者之间的耦合关系,增强了信息的封装程度。同时,这也要求组件接口必须使用一种与组件实现无关的语言。目前组件接口的描述标准是IDL语言。2、尽可能地保持接口不变。由于接口是组件之间的协议,因此组件的接口一旦被发布,组件生产者就应该尽可能地保持接口不变,任何对接口语法或语义上的改变,都有可能造成现有组件与客户之间的联系遭到破坏。3、每个组件都是自主的,有其独特的功能,只能通过接口与外界通信。当一个组件需要提供新的服务时,可以通过增加新的接口来实现,不会影响原接口已存在的客户,而新的客户可以重新选择新的接口来获得服务。,接口,接口的声明:interfaceinterface IControlvoid Paint();,using System;interface IControlvoid Paint();interface ITextBox:IControlvoid SetText(string text);interface IListBox:IControlvoid SetItems(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 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、代表的使用步骤进一步的分析8、代表与事件9、真正的例子,代表,1、代表(delegate),也有的书将它翻译成委托,也有的翻译成代理,它才是C#新引进的新概念之一,也是最有特色的最为强大的功能之一。,2、C#引入代表(delegate)就是为了解决C和C+中指针滥用所带来的危害。可以这样说,一个地道的C#程序员,完全可以不用指针就能完成C和C+中使用指针所能完成的任务。,3、当然,若您恋恋不舍指针,甚至没有指针时就不知如何编程,没有关系,C#还是还会忘记您的。,代表,4、与指针不同,代表在C#是类型安全的:强类型,5、代表:与C、C+相比,代表相当于一类方法(函数)的指针,但仍有很大的差别。,C语言中,指向函数的指针: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);,仔细注意:它有参数表。,代表,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);Delgate2 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),仔细注意:它有参数表。,仔细注意:它有参数表。,语义是什么?,代表,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=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(Hello);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 EventHandler(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 sender,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)例子(实例方法和表态方法的代理),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()MyClass 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数组的异同点(申明、初始化、引用等)它的基类、主要属性、方法多维数组的特点新概念:不规则数组,也叫锯齿形数组,也叫“交错形数组”,它的特殊作用。不要把交错形数组与多维数组弄混。多维数组是维数大于的数组,而交错形数组是元素是数组的数组。分析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;char,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;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=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;Console.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.Length);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数组的异同点(申明、初始化、引用等)它的基类、主要属性、方法多维数组的特点新概念:不规则数组,也叫锯齿形数组,也叫“交错形数组”,它的特殊作用。不要把交错形数组与多维数组弄混。多维数组是维数大于的数组,而交错形数组是元素是数组的数组。分析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;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=65535;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与枚举类型变量的隐式转换。,枚举转换,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 Sunday=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到任何枚举类型;从任何枚举类型到 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.WriteLine(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.WriteLine(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 都是引用类型存在从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,其中S不是T的子接口;从元素类型为Ts的数组类型S到元素类型为Tt的数组类型T的转换,这种转换需要满足下列条件:S和T只有元素的数据类型不同,但维数相同;Ts和Tt都是引用类型;存在从Ts到Tt的显式引用转换;从 System.Array到数组类型;从System.Delegate到代表类型;从System.ICloneable到数组类型或代表类型;显式引用转换发生在引用类型之间,需要在运行时检测以确保正确。为了确保显式引用转换的正常执行,要求源变量的值必须是null或者它所引用的对象的类型可以被隐式引用转换转换为目标类型。否则显式引用转换失败将抛出一个无效类型转换(InvalidCastException)异常。,3.3 类型转换,数值转换枚举转换引用转换装箱和拆箱转换转换检查,3.3.3引用转换,引用转换,值类型与引用类型的转换,3.3.4装箱和拆箱,3.3 类型转换,C#语言类型系统提出的两个核心概念,装箱(boxing)拆箱(unboxing),装箱和拆箱,3.3.4装箱和拆箱,装箱和拆箱机制:使得在C#类型系统中任何值类型、引用类型和object对象类型之间进行转换。我们称这种转化为绑定连接。简单地说:有了装箱和拆箱的概念,对任何类型的值来说,最终我们都可以看作是object 类型。,3.3 类型转换,C#语言类型系统提出的一个核心概念装箱(boxing)和拆箱(unboxing)。,装箱和拆箱,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;object 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 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 UnboxingSample 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.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环境,

    注意事项

    本文(C#语言之数据类型.ppt)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开