《第二章C语言基础.ppt》由会员分享,可在线阅读,更多相关《第二章C语言基础.ppt(67页珍藏版)》请在三一办公上搜索。
1、2.1数据类型2.2 变量和常量2.3 运算符2.4 流程控制2.5 类和对象2.6 委托与事件,第二章 C#语言快速掌握,第二章 C#语言快速掌握,C#语言概述,第二章 C#语言快速掌握,C#是一种基于现代面向对象设计方法的语言,由C和C+发展而来,是专为.NET使用而设计的的一种新的编程语言,能最大限度发挥.NET平台的作用。,第二章 C#语言快速掌握,C#、C+和Java重要功能的比较,第二章 C#语言快速掌握,使用csc.exe(C#编译器)对C#程序进行编译,可编译产生.exe 文件和.dll文件等举例,第二章 C#语言快速掌握,2.1 C#数据类型 值类型 C#数据类型 引用类型值
2、类型与引用类型的区别(1)值类型的变量直接包含其数据,而引用类型的变量存储对其数据的引用。(2)对于引用类型,两个变量可能引用同一个对象,因此对一个变量的操作可能影响另一个变量所引用的对象。对于值类型,对一个变量的操作不会影响另一个变量。(3)值类型的数据存储在内存中的堆栈中,而引用类型的数据存储在内存中的堆中,第二章 C#语言快速掌握,用户定义的结构类型,内置的简单类型(如数值类型、布尔型),第二章 C#语言快速掌握,2.1.1值类型1数值类型1)整形类型2)浮点类型3)Decimal类型Decimal dec=2.2m;整型和Decimal型之间可以进行隐式转换decimal myMone
3、y=300;/整数300被隐式转换为 decimal类型 注:一般不在浮点型和 decimal 类型之间进行类型转换,第二章 C#语言快速掌握,2 bool类型 布尔类型(bool)表示布尔逻辑量,其值只能是true或者false,如 bool x=true;注:布尔类型不能与其他类型进行转换,第二章 C#语言快速掌握,3 用户自定义结构 结构通常是一组相关信息的组合体,通常用于表示简单或较少的数据。如:public struct point public int i,j;public point(int x,int y)i=x;j=y;,第二章 C#语言快速掌握,结构类型与类类型的区别:(1
4、)结构是值类型,类是引用类型(2)结构不支持继承(3)结构不允许声明无参数的实例构造函数,第二章 C#语言快速掌握,4 枚举类型 枚举(enumerate)由一组特定的常量构成,使用关键字enum来定义。默认情况下,第一个枚举数的值为0。例:enum Days Mon,Tue,Wed,Thu,Fri,Sat,Sun;若要强制元素序列从1开始:num Days Mon=1,Tue,Wed,Thu,Fr,,Sat,Sun;,第二章 C#语言基础,enum WeekSun,Mon,Tue,Wed,Thu,Fri,Sat Week t1;t1=Week.Mon;Console.WriteLine(t1
5、);t1=t1+1;Console.WriteLine(t1);t1=(Week)4;Console.WriteLine(t1);.,编译运行程序,输出为:Mon Tue Thu,第二章 C#语言快速掌握,2.1.2 引用类型1 字符串stringString是.NET 框架中System.String的别名,用于存储字符串,以及对字符串进行许多操作。字符串的值一经创建不能修改,如果要修改字符串的值,需要使用System.Text.StringBuilder类如:StringBuilder MyStringBuilder=new StringBuilder(Hello!);MyStringBu
6、ilder.Append(What a beautiful day.);,第二章 C#语言快速掌握,2 数组 数组是一种包含若干个相同类型数据的集合,数组元素可以通过索引(在C#中规定索引从0开始,即第一个元素的索引为0,第二个为1,以此类推)进行访问。C#中所有的数组都是从NET类库中的SystemArray类库中派生的。数组可以是一维的,也可以是多维。,第二章 C#语言快速掌握,多维数组:在C#中多维数组的维数等于数组类型方括号 内逗号的个数加上1。,如:Int,mypoint=0,1,2,3,6,9;,Console.WriteLine(mypoint.Length);Console.W
7、riteLine(mypoint.GetLength(0);Console.WriteLine(mypoint.GetLength(1);,6,3,2,第二章 C#语言快速掌握,数组声明时,“”应放在类型的后面。声明时需要指明数组元素的类型和数组的名称,int rr=12,4,4;int rr=12,4,4;,第二章 C#语言快速掌握,初始化有两种方式,一种是声明时进行初始化,一种是使用new关键字初始化。int array=1,3,5;int array=new int3 1,3,5;int array=new int 3;myarray0=1;myarray1=2;myarray2=3;,
8、注:使用new关键字初始化数组时,数组大小必须与元素个数相匹配,第二章 C#语言快速掌握,2.1.3 装箱与拆箱装箱:值类型打包到Object引用类型的一个实例中拆箱:从对象中够提取值类型,public static void Main()int i=123;object o=i;/装箱(隐式或显式)i=234;int j=(int)o;/取消装箱(显式)Console.WriteLine(i=0,j=1,i,j);,i=234,j=123,第二章 C#语言快速掌握,2.2 变量与常量(略)标识符的命名规则2.3 运算符 相同优先级的运算符,除赋值运算符按照从右到左的顺序执行以外,其余运算符按
9、照从左到右的顺序执行。括号的优先级最高,它可以改变符号的计算顺序。,第二章 C#语言快速掌握,2.4 流程控制 2.4.1 条件语句 1 If语句用ifelse结构的选择语句语法为:if(布尔表达式)expression-1;else expression-2;,第二章 C#语言快速掌握,public static void Main()double x=85.7;if(x=90)Console.WriteLine(“优”);else if(x=80)Console.WriteLine(“良”);else if(x=70)Console.WriteLine(“中”);else if(x60,e
10、lse分支总是与最近的一个if语句配对,第二章 C#语言快速掌握,2 Switch语句switch根据一个表达式的多个可能取值来选择执行的代码段举例 注:在C#中,执行完一个case部分中的代码块后,必须有break语句。,第二章 C#语言快速掌握,2.4.2 循环语句 1 do-while循环;2 while循环;dowhile循环语句与while循环语句功能相近,但与while语句不同的是,dowhile语句至少执行一次内嵌语句或者更多次。,第二章 C#语言快速掌握,int i=1;do Console.WriteLine(0,i+);while(i=10);,int i=1;while(
11、i=10)Console.WriteLine(0,i+);,1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10,第二章 C#语言快速掌握,3 for循环;for循环重复执行一个语句或一个语句块,直到指定的表达式求得 false 值为止。注:不要产生死循环,第二章 C#语言快速掌握,4 foreach循环foreach语句用于遍历集合中的每一个元素,但不利于更改集合内容。注:foreach循环语法如下:foreach(类型 标识符 in 表达式)举例,第二章 C#语言快速掌握,int even=0,odd=0;int arr=new int 0,1,2,5,7,8
12、,11;foreach(int i in arr)if(i%2=0)even+;else odd+;Console.WriteLine(找到0个奇数,和1个偶数,odd,even);,第二章 C#语言快速掌握,2.4.3 跳转语句 break语句:终止并跳出循环 continue语句:终止当前循环,开始下一个新的循环 goto语句(不要轻易使用);return语句:跳出循环及其包含的函数 throw语句:抛出一个异常,第二章 C#语言快速掌握,public static void Main()for(int i=1;i=10;i+)if(i=5)break;Console.WriteLine(
13、i);,1 2 3 4,第二章 C#语言快速掌握,public static void Main()for(int i=1;i=8;i+)if(i=5)continue;Console.WriteLine(i);,1 2 3 4 6 7 8,第二章 C#语言快速掌握,2.5 类和对象2.5.1 类 C#中提供了很多标准的类,也可以使用自己定义的类,C#中所有的类都是从Object类派生出来的。类修饰符的定义和使用方法P48成员修饰符的定义和使用方法P48注:当一个类成员声明不包括任何修饰符时,默认为 private,第二章 C#语言快速掌握,Public class Employee publ
14、ic string name=xx;double salary=100.00;/public double AccessSalary()return salary;.Employee e=new Employee();double t=e.salary;double t=e.AccessSalary();,类成员变量未指定访问修饰 符,则默认为private,第二章 C#语言快速掌握,class MyClass protected int x;/protected 访问修饰符 protected int y;class MyDerivedC:MyClass public MyDerivedC(
15、int e,int g)/在派生类中访问protected成员x、y x=e;y=g;public void paint()Console.WriteLine(x is0and y is 1,x,y);,第二章 C#语言快速掌握,特殊含义的类类型 System.Object:所有其他类型的最终基类 System.Exception:所有异常类型的最终基类 System.Array:所有数组类型的基类 System.Delegate:所有委托类型的基类,第二章 C#语言快速掌握,2.5.2 属性和方法 C#类的一般声明格式如下:类修饰符 class:BaseClass 类的成员定义(类体);;按
16、照类的成员是否为函数,将其分为成员变量(如常量、变量、事件、类型)和成员函数(如方法、属性、索引指 示器、运算符、构造函数、析构函数),第二章 C#语言快速掌握,2.5.3 对象的创建和回收 如果类中没有定义构造函数,系统会默认执行Object提供的构造函数,并使用默认值初始化对象字段。构造函数的函数名必须和类名一样。类的构造函数分为三类:实例构造函数,私有构造函数,静态构造函数。,第二章 C#语言快速掌握,实例构造函数:用于创建和初始化实例。一个类可以有多个实例构造函数举例(P51),第二章 C#语言快速掌握,私有构造函数 私有构造函数通常用在只包含静态成员的类中。如果类具有一个或多个私有构
17、造函数而没有公共构造函数,则不允许创建该类的实例。注:如果不对构造函数使用访问修饰符,则在默认情况下为私有构造函数。,第二章 C#语言快速掌握,public class MyClass private MyClass()public static int counter;public static int IncrementCounter()return+counter;,MyClass myObject=new MyClass();MyClass.counter=100;MyClass.IncrementCounter();,第二章 C#语言快速掌握,静态构造函数 在创建第一个实例或引用任何
18、静态成员之前,将自动调用 静态构造函数来初始化类。无法直接调用静态构造函数。静态构造函数既没有访问修饰符,也没有参数。一个类只能有一个静态构造函数。static MyClass(),第二章 C#语言快速掌握,class MyClass static MyClass()Console.WriteLine(静态构造函数被调用);public static void MyMethod()Console.WriteLine(MyMethod静态方法被调用);class MainClass static void Main()MyClass.MyMethod();/调用类的静态方法时,将自动调用静态构造
19、函数,输出为:静态构造函数被调用 MyMethod静态方法被调用,第二章 C#语言快速掌握,析构函数 析构函数用于销毁类的实例,常用来处理类用完后的处理工作。一个类只能有一个析构函数。无法显示调用析构函数。它们是被自动调用的。Class MyClass MyClass()/收尾工作,第二章 C#语言快速掌握,2.5.4 继承和多态 1 继承C#中类是单继承,即只能继承一个基类,但可以实现多个接口。class ClassA class DerivedClass:BaseClass class ImplClass:IFace1,IFace2 class ImplDerivedClass:BaseC
20、lass,IFace1 class ImplDerivedClass:Base1Class,Base2Class,IFace1,第二章 C#语言快速掌握,类的继承具有传递性,如:A B C(继承了A和B中声明的所有public和protected成员)类的继承举例,第二章 C#语言快速掌握,派生类可以增加自己的成员,不能删除基类的成员,但 可以将其覆盖。当派生类和基类中同时定义了相同的成 员时,基类中的成员被覆盖。(举例)访问关键字:base:用于从派生类中访问基类的成员。this:引用类的当前实例,public class Person/定义基类 protected string ssn=4
21、44-55-6666;protected string name=John L.Malgraine;public void GetInfo()/在基类中定义方法GetInfo()Console.WriteLine(Name:0,name);Console.WriteLine(SSN:0,ssn);class Employee:Person/定义派生类 public string id=ABC567EFG;public new void GetInfo()/在派生类中使用new修饰符显式隐藏从基类继承的方法GetInfo()base.GetInfo();Console.WriteLine(Emp
22、loyee ID:0,id);,第二章 C#语言快速掌握,2 多态 多态性指同一操作作用于不同类的实例,这些类进行不同的解释,产生不同的执行结果。C#中的两种多态性,即编译时的多态(通过函数的重载实现),一种是运行时的多态(通过虚成员实现)。编译时的多态性为我们提供了运行速度快的特点,运行时的多态 性则带来了高度灵活和抽象的特点。,第二章 C#语言快速掌握,重载:一个函数名有多种实现方法,它们的函数名相同,但参数个数或返回类型不同。,第二章 C#语言快速掌握,被virtual关键字修饰的方法或属性称为虚拟成员,虚拟成 员的实现可由派生类中的重写成员更改。override 修饰符 能够提供从基类
23、继承的成员的新实现。注:override 修饰符重写要求P57举例,public class Person/定义基类 protected string ssn=444-55-6666;protected string name=John L.Malgraine;public virtual void GetInfo()/在基类中定义虚方法 Console.WriteLine(Name:0,name);Console.WriteLine(SSN:0,ssn);class Employee:Person/定义派生类 public string id=ABC567EFG;public overrid
24、e void GetInfo()/在派生类中重写基类中的虚方法,必须使用override base.GetInfo();Console.WriteLine(Employee ID:0,id);,第二章 C#语言快速掌握,补充:接口类型 接口通常是公共契约,定义的一种协定,实现接口的类或结构都必须遵守其协定。接口通过关键字interface进行定义,不提供它所定义的成员的实现。,Public interface Ishout void shout();,Class someclass:IshoutPublic void shout().,第二章 C#语言快速掌握,接口类型举例(银行账户的存取操作
25、),public class saveaccount:Ibankaccount/继承接口 private decimal balance;public void payin(decimal amount)/具体实现接口中定义的方法 balance+=amount;public void print()Console.WriteLine(您的余额为:0,balance);,public class goldaccount:Ibankaccount/继承接口decimal balance;public void payin(decimal amount)/具体实现接口中定义的方法 balance+
26、=amount+0.5m;,public interface Ibankaccount/定义了一个接口 void payin(decimal amount);,第二章 C#语言快速掌握,2.6 委托与事件委托类型 委托类似于C或C+的函数指针,可以将方法作为参数进行传递,可用于定义回调。delegate是关键字,委托的使用一般分为三步:定义、实例化和调用。委托的特点P59,第二章 C#语言快速掌握,public void EnglishGreeting(string name)Console.WriteLine(Morning,+name);Public void ChineseGreetin
27、g(string name)Console.WriteLine(早上好,+name);,1:定义一个委托 public delegate void GreetingDelegate(string name);,2:实例化一个委托GreetingDelegate greeting=new GreetingDelegate(EnglishGreeting);,3:调用一个委托 greeting(lisa);,第二章 C#语言快速掌握,2.6.2 使用委托进行回调 异步回调:在类的方法中将一个委托作为参数进行传递,并且可调用该委托。异步回调举例,namespace ConsoleApplicatio
28、n1 class Program public delegate void Del(string message);/定义一个委托 public static void DelegateMethod(string message)Console.WriteLine(message);public static void MethodWithCallback(int param1,int param2,Del callback)/将实例化的委托作为参数传递 callback(最终得数值为+(param1+param2).ToString();static void Main(string arg
29、s)Del handler=new Del(DelegateMethod);MethodWithCallback(1,2,handler);Console.ReadLine();,第二章 C#语言快速掌握,2.6.3 动态注册和移除事件 事件是用来通知对象需要执行某种操作的方式,通常用于图形用户界面中。事件可以使用委托事件处理程序来进行声明,也可以使用匿名方法来替代委托。注:使用“+=”赋值运算符将方法注册到事件 使用“-=”移除事件处理程序的委托举例,namespace ConsoleApplication1 class Program public delegate void Button
30、EventHandler();/定义委托 class TestButton public event ButtonEventHandler OnClick;/声明事件 public void TestHandler()Console.WriteLine(TestHandler被注册);public void Click()OnClick();/当调用Click()方法时会触发OnClick事件,static void Main(string args)TesButton mb=new TesButton();mb.OnClick+=new ButtonEventHandler(mb.TestH
31、andler);/将方法注册到事件 mb.OnClick+=delegate Console.WriteLine(“匿名事件被注册”);/将匿名方法注册到事件 mb.Click();Console.WriteLine(移除TestHandler事件);mb.OnClick-=new ButtonEventHandler(mb.TestHandler);/将方法从事件中移除 mb.Click();Console.ReadLine();,第二章 C#语言快速掌握,补充:异常处理C#中的异常机制 的特点:(1)所有的异常必须由从 System.Exception 派生的类的实例来表示。(2)系统级的
32、异常都对应地定义了与其匹配的异常类,第二章 C#语言快速掌握,异常是由try语句处理,try语句有以下三种形式:try-catch try-finally try-catch-finally,第二章 C#语言快速掌握,try-catch:通过try语句的控制机制来检测代码中的异常并做出相应的处理,正常情况try代码中的语句依次执行,而catch代码段不会被执行,当出现异常时就执行catch语句进行异常处理。举例,第二章 C#语言快速掌握,try-finally:try-finally语句中没有catch,因此不对异常进行 处理。如果发生异常,该异常将执行完finally代码段之后被抛 出。不管
33、是否发生异常,finally语句都将被执行。try-catch-finally:当发生异常时由catch语句对异常进行处理,与try-catch语句相同,不论是否发生异常finally语句都将被执行。,第二章 C#语言快速掌握,补充:命名空间(namespace)namespace关键字用于声明一个范围。此命名空间范围允许组织代码并提供了创建全局唯一类型的方法。using指令用于创建命名空间的别名或导入在其他命名空间中定义的类型。using System.Data;/导入命名空间 System.Data using MyAlias=MyCompany.Proj.Nested;/定义命名 空间的别名,第二章 C#语言快速掌握,上机操作题基础题:1 熟悉“virtual”、”override”等使用方法,编写求各种形状(圆、矩阵、正方形等)的图形面积的程序。2 使用”foreach”语句求出从1-100的偶数个数和奇数个数。扩展题:1 使用委托来实现简单的计算器。2 参考程序清单2.35,编写一个使用事件进行处理的示例。,
链接地址:https://www.31ppt.com/p-5988745.html