第二章C编程基础1.ppt

上传人:sccc 文档编号:5672784 上传时间:2023-08-08 格式:PPT 页数:72 大小:775.51KB
返回 下载 相关 举报
第二章C编程基础1.ppt_第1页
第1页 / 共72页
第二章C编程基础1.ppt_第2页
第2页 / 共72页
第二章C编程基础1.ppt_第3页
第3页 / 共72页
第二章C编程基础1.ppt_第4页
第4页 / 共72页
第二章C编程基础1.ppt_第5页
第5页 / 共72页
点击查看更多>>
资源描述

《第二章C编程基础1.ppt》由会员分享,可在线阅读,更多相关《第二章C编程基础1.ppt(72页珍藏版)》请在三一办公上搜索。

1、第2章 C#编程基础,讲解提纲,2.1 C#语言简介 2.2 C#数据类型 2.3 运算符 2.4 C#中的控制语句 2.5 C#面向对象程序设计基础 2.6 C#面向对象高级特性,第2章 C#编程基础,学习目的与要求:本章将介绍Microsoft为.NET框架设计的C#语言,C#是一种功能强大的面向对象和类型安全的编程语言,支持类、接口、封装、抽象等功能。开发人员可以使用C#语言创建任何一种.NET应用程序。通过对本章的学习,读者应重点掌握C#数据类型、常量、变量、循环语句、选择语句等内容。本章的难点是类的声明、对象的定义、C#类的继承与多态、C#的重载与接口等内容。,2.1 C#语言简介,

2、C#是微软公司专门为.NET量身定做的语言,它与.NET有着密不可分的关系。C#的类型就是.NET框架所提供的类型,其本身并无类库,而是直接使用.NET框架所提供的类库。类型安全检查、结构化异常处理也都是交给公共语言运行库处理的。因此,C#是最适合开发.NET应用的编程语言。,2.1.1 C#语言的特点,C#语言的特点主要包括如下几个方面。(1)语法简洁(2)面向对象设计(3)与Web的紧密结合(4)灵活性和兼容性,2.1.2 关键字和标识符,1关键字,2标识符 在C#语言中,标识符的命名规则如下:标识符不能与C#语言中的关键字同名。标识符只能由字母、数字、下划线组成。标识符必须以字母开头或以

3、符号开始。标识符不能与C#语言中的库函数同名。标识符中不能包含空格、斜杠、运算符及标点符号等特殊符号。,2.1.2 关键字和标识符,C#的标识符区别大小写,例如下面的三个标识符是不同的。MembermemberMemBer C#的标识符不能与关键字相同,但是可以使用前缀来避免这种冲突,例如:while while 上面两个单词中第一个单词是合法的标识符,而第二个单词不是合法标识符,因为while是个关键字。,2.2 C#数据类型,C#将所有的数据类型分成两大类:值类型引用类型,2.2.1 简单类型概述,值类型通常用来表示基本类型、简单类型。C#的值类型主要包括:整数类型布尔类型实数类型字符类型

4、结构类型枚举类型,整数类型,C#定义了8种整数类型,布尔类型,布尔类型用来表示“真”和“假”两个逻辑概念.在C和C+语言中,用0来表示“假”,用非“0”的值表示“真”,但是C#语言中对上述表示进行的限制,C#中布尔类型只能取“真”和“假”两个值,分别用true和false两个关键字来表示 bool x 1;/错误,不存在这种写法;bool x true;/正确,浮点类型,C#采用两种数据类型来表示小数:单精度(float)和双精度(double),两者的差异主要取决于取值范围和精度。,字符类型,C#提供字符(char)处理ASCII字符和Unicode编码的字符,ASCII字符是美国标准委员会

5、提供的,采用7位二进制表示的字符。Unicode是国际标准化组织制定的采用16位二进制表示的字符,它可以表示世界上大多数语言。,结构类型,有时需要将不同类型的数据组合成一个有机的整体以便使用,例如要编制一个学生信息管理系统,对全校学生的信息进行管理,一个学生具有学号、姓名、性别、年龄、地址等信息,如果使用简单数据类型分布存储这些信息的话,很难完成反映出这些信息的内在联系,所以应该将它们组织成一个整体。C#语言提供了结构类型,允许用户根据实际的需要实现特定的数据类型,struct Teacher public string Name;public uint Age;public string P

6、hone;public string Address;namespace Structs class Program static void Main(string args)Teacher t;t.Name=小刘;t.Age=35;t.Phone=123456789;t.Address=北京大学;Console.WriteLine(该老师姓名=0,年龄=1,电话=2,通讯地址=3,t.Name,t.Age,t.Phone,t.Addressl);,在Main()函数中编写结构类型的实用方法,其代码如下:,Console类方法,Console类表示控制台应用程序的标准输入流、输出流和错误流。,

7、枚举类型,在程序设计中,有时会用到由若干个有限数据元素组成的集合,可将这些数据集合定义为枚举类型(enum)。枚举类型定义的一般形式为:enum枚举名枚举值表;在枚举值表中应罗列出所有可用值,这些值也称为枚举元素。,namespace enums enum WeekDaysun,mon,tue,wed,thu,fri,sat;class Program static void Main(string args)WeekDay day;day=WeekDay.sun;Console.WriteLine(day的值是0,day);,在VS中建立一个名称为enums的控制台应用程序,在Program

8、类中输入以下代码:,2.2.2 引用类型,引用类型,其含义是该类型的变量不直接存储所包含的值,而是指向它所要存储值的地址.在C#中提供以下引用类型给你使用:1类2数组3代理4接口,类类型,类是面向对象编程的基本单位,它是一种包含数据成员,函数成员和嵌套类型的数据结构。类的数据成员有变量,域和事件,函数成员包括方法,属性,构造函数和析构函数。C#中两个经常用到的类分别是object类和string类。,类与对象的关系,类,建立,建立,对象/实例,数组,同C语言一样,C#语言中也有数组类型,一个数组包含有通过计算下标访问的变量,所有包含于数组中且被当作元素的变量必须是同一类型。这种类型自然被称为“

9、数组类型”。数组声明格式:数据类型 数组名注意:方括号必须跟在类型后面,而不是标识符后面;数组大小不是其数组定义的一部分,namespace Arrays class Program static void Main(string args)int arr1=new int2;/定义一维数组 int arr2=new int 1,2,3;/定义一维数组,并初始化数组 string arr3=“six”,“is”,“me”;/定义一维数组,并初始化数组 int,arr4=1,2,3,4;int,arr5=new int3,4;for(int i=0;i arr1.Length;i+)arr1i=

10、i*i*i;Console.WriteLine(arr10=1,i,arr1i);for(int i=0;i 4;i+)for(int j=0;j 3;j+)arr5j,i=i*j;Console.WriteLine(arr50,1=2,j,i,arr5j,i);,代理类型(委托),委托就是定义一种变量来指代一个函数或者一个方法。委托使用分三步:1、委托声明 2、委托实例化 3、委托调用,创建一个名称为Delegates的控制台应用程序,namespace Delegates delegate int mydelegate();class myclass public int InstMeth

11、od()Console.WriteLine(Call the InstMethod.);return 0;class Program static void Main(string args)myclass p=new myclass();mydelegate d=new mydelegate(p.InstMethod);d();,接口类型,接口描述了组件对外提供的服务。在组件与组件之间、组件与客户之间都通过接口进行交互。例如:interface 收费 void ShowMoney();/收费标准,Class 公交车:收费 void ShowMoney()Console.Write(“公交车收

12、费是1元”);/必须要实现接口中的方法,namespace Interfaces interface IShowMoney void GetMoney();class BusMoney:IShowMoney public void GetMoney()Console.WriteLine(公交收费一元);class Program static void Main(string args)BusMoney b=new BusMoney();b.GetMoney();,2.3 运 算 符,在C#语言中,和其他编程语言一样,具有多种运算符。C#语言中的运算符大体上分为6种:算术运算符条件运算符逻辑运

13、算符关系运算符赋值运算符成员访问运算符,2.4 C#中的控制语句,C#程序的执行是由一系列按照文本顺序执行的语句进行的,C#的常用语句包括:基本语句条件语句循环语句跳转语句异常处理语句,2.4.1 选择语句,1.if语句(1)if语句的语法格式一:if(表达式)程序语句块1(2)if语句的语法格式二:if(表达式)程序语句块1else程序语句块2,2.4.1 选择语句,(3)if语句的语法格式三:if(表达式)程序语句块1else if程序语句块2else 程序语句块3,2.4.1 选择语句,2.switch语句switch语句的语法格式如下:switch(表达式)case 表达式1:程序语句

14、块1;case 表达式2:程序语句块2;.case 表达式n-1:程序语句块n-1;default:程序语句块n;,2.4.1 选择语句,每一个switch语句最多只能有一个default标号分支。switch语句的执行方式如下。(1)首先计算出switch表达式的值。(2)如果switch表达式的值等于某一个switch分支的常量表达式的值,那么程序控制跳转到这个case标号后的语句列表中。(3)如果switch表达式的值无法与switch语句中任何一个case常量表达式的值匹配而且switch语句中有default分支,程序控制会跳转到default标号后的语句列表中。(4)如果switc

15、h表达式的值无法与switch语句中任何一个case常量表达式的值匹配而且switch语句中没有default分支,程序控制会跳转到switch语句的结尾。(5)如果程序执行遇到break语句,则自动跳出switch语句。,2.4.2 循环结构,循环用于重复执行一组语句。循环可分为三类:第一类是在条件变为False之前重复执行语句,第二类是在条件变为True之前重复执行语句,第三类是按照指定的次数重复执行语句。在C#中可使用的循环语句有4种格式。(1)do.while:当(或直到)条件为True时循环。(2)while:当条件为True时循环。(3)for:指定循环次数,使用计数器重复运行语句

16、。(4)foreach:对于集合中的每项或数组中的每个元素,重复执行。,2.4.2 循环结构,for循环 for循环是循环类型中最复杂的,但也是最为常用的。C#中for语句的基本语法为:for(初始化表达式;条件表达式;迭代表达式)循环语句,2.4.2 循环结构,4foreach语句foreach循环是for循环的一种特殊表现形式,如果想遍历集合或者数组中的所有条目,使用foreach是很好的解决方案。foreach语句的语法格式如下:foreach(局部变量 in 集合)循环语句,代码如下:,namespace Foreach class Program static void Main(s

17、tring args)int num=1,2,3,4,5,6,7,8,9,10;foreach(int i in num)Console.Write(i);,2.4.3 跳转语句,1break语句2continue语句,2.4.4 异常处理,C#的异常可能由两种方式导致。(1)throw语句无条件抛出异常。(2)C#语句和表达式执行过程中激发了某个异常的条件,使得操作无法正常结束,从而引发异常。例如,整数除法操作分母为零时将抛出一个异常。异常由try语句来处理,try语句提供了一种机制来捕捉执行过程中发生的异常。try语句有3种基本格式:try.catchtry.finallytry.catc

18、h.finally,2.4.4 异常处理,1try.catch结构2tryfinally结构 3try.catch.finally结构,识别不同的异常,Exception:程序中的所有异常FormatException:数据格式异常OverflowException:数据溢出异常DivideByZeroException:分母为零异常,trycatch,namespace Trycatch class Program static void Main(string args)long factorial=1;long num=100;try checked for(long cur=1;cur

19、=num;cur+)factorial*=cur;catch(OverflowException oe)Console.WriteLine(计算0的阶乘时引发溢出异常,num);Console.WriteLine(0,oe.Message);return;Console.WriteLine(0的阶乘是1,num,factorial);,数据溢出异常,tryfinally,不管try子句是如何退出的,程序的控制权最后都会转移到finally子句执行。,namespace Tryfinallys class Program static void Main(string args)try Cons

20、ole.WriteLine(执行try子句!);goto leave;finally Console.WriteLine(执行finally子句!);leave:Console.WriteLine(执行leave标签!);,trycatchfinally,namespace Trycatchfinallys class Program static void Main(string args)try throw(new ArgumentNullException();catch(ArgumentNullException e)Console.WriteLine(Exception:0,e.Me

21、ssage);finally Console.WriteLine(执行finally子句);,2.5 C#面向对象程序设计基础,面向对象的世界中,一定会遇到的两个名词就是:对象和类。类在面向对象观念中可视为对象的“模板”、“蓝图”。对象都是独一无二的,这些差异会反映在对象的属性值上。与传统的面向过程的编程方法相比,面向对象编程方法有3个优点:程序的可维护性好。程序容易修改。对象可以使用多次,可重用性好。,2.5.1 类声明,C#是面向对象的编程语言。如果使用新的类,则必须在使用之前声明它。当类被成功地声明后,就可以当作一种新的类型来使用,这些新声明的类都属于引用类型。在C#中使用关键字clas

22、s来声明类,使用new关键字可以建立类的一个实例,如下所示:Class A Class B void f()A a=new A();以上代码在类B的方法f中创建了一个类A的实例。,2.5.2 继承,为了提高软件模块的可重用性和可扩充性,以提高软件的开发效率,因此希望能够利用前人或自己以前的开发成果。为此,任何面向对象的程序设计语言都能够提供两个重要的特性:继承性(Inheritance)和多态性(Polymorphism)。在VS2008中建立一个名称为“Derived”的控制台应用程序,在Program.cs文件中输入以下代码:程序中,类DerivedA继承了BaseA,这样DerivedA

23、就包含了BaseA的方法。上述代码运行后,其输出结果如图所示。,namespace Derived class BaseA public void FuncA()System.Console.WriteLine(Funciton A);class DerivedA:BaseA public void FunB()System.Console.WriteLine(Funciton B);class Program static void Main(string args)DerivedA aDerived=new DerivedA();aDerived.FuncA();aDerived.FunB

24、();,2.5.3 类的访问修饰符,public(公有)这种类型或类型成员是完全可以访问的。internal(内部)对同一包中的应用程序或库是可以访问的,包之外不能访问。private(私有)只有该类的成员可以访问,类外部的成员是不能访问的protected(保护)指类C中的类型成员只能在C或C派生的类中访问。,2.5.4 构造函数和析构函数,构造函数用于执行类实例的初始化。每个类都有构造函数,即使没有声明它,编译器也会自动提供一个默认的构造函数。在访问一个类的时候,系统将最先执行构造函数中的语句。构造函数有以下特性:一个类的构造函数通常与类名相同。构造函数不声明返回类型。构造函数总是publ

25、ic类型的。,2.5.4 构造函数和析构函数,构造函数和析构函数是类的两个特殊函数,都是系统自动调用的。当创建对象的时候,自动调用构造函数,执行其中语句。当程序执行完毕的时候,系统自动调用析构函数。析构函数,用于专门释放被占用的系统资源。,2.5.5 this关键字,this关键字仅局限在构造函数、类的方法和类的实例中使用。在类的函数中出现的this 作为一个值类型时,表示正在构造的对象本身的引用。,2.5.6 static关键字,1.用在类里的属性、方法前面,这样的静态属性与方法不需要创建实例就能访问,通过类名或对象名都能访问它;2.方法内部的静态变量:方法内部的静态变量,执行完静态变量值不

26、消失,再次执行此对象的方法时,值仍存在,这是与局部变量最大的区别;,namespace static public class Person private int id;public static int total=0;public Person()total+;id=total;class Program static void Main(string args)Person.total=100;Console.WriteLine(Person.total);Person c=new Person();Console.WriteLine(Person.total);,2.6 C#面向对象

27、高级特性,与其他的面向对象语言一样,C#支持多态性、虚方法、函数的重载等。除此之外,C#还提供一种特殊的数据形态“装箱”。,2.6.1 多态性,在C#中,多态性(Polymorphism)的定义是:“同一操作作用于不同类的实例时,不同的类将进行不同的解释,最后产生不同的执行结果”。C#支持两种类型的多态性。一是编译时的多态性。编译时的多态是通过重载来实现的。对于非虚的成员来说、系统在编译时,根据传递的参数、返回的类型等信息决定实现何种操作。二是运行时的多态性。运行时的多态性是直到系统运行时,才根据实际情况决定实现何种操作。在C#中,运行时的多态性通过虚方法实现。编译时的多态性提供了运行速度快的

28、特点,而运行时的多态性则带来了高度灵活和抽象的特点。,2.6.2 虚方法,类的方法前如果加上了virtual修饰符,就称为虚方法,反之为非虚方法。在VS2008中建立一个名称为“virtuals”的控制台应用程序,在Program.cs文件中输入以下代码:调用虚方法运行时将确定调用对象是什么类的实例,并调用合适的覆写(override)的方法从而实现多态。,namespace virtuals class Test static void Main(string args)Base b=new Base();b.Draw();Derived d=new Derived();d.Draw();d

29、.Fill();Base obj=new Derived();obj.Fill();obj.Draw();,class Base public void Fill()Console.WriteLine(调用Base类中的Fill方法);public virtual void Draw()Console.WriteLine(在虚方法中调用Base类中的Draw方法);class Derived:Base public override void Draw()Console.WriteLine(调用Derived子类中的Draw方法);public new void Fill()Console.W

30、riteLine(调用Deriveed子类中的Fill方法);,虚方法示例:,1、定义一个员工类的虚方法:class Employee protected string _name;public Employee(string name)_name=name;public virtual void StarWord()Console.WriteLine(_name+开始工作:);,2、派生一个经理类:,class Manager:Employee public Manager(string name):base(name)public override void StarWord()base.

31、StarWord();Console.WriteLine(给员工下达任务);,3、再派生一个销售类:,class Seller:Employee public Seller(string name):base(name)public override void StarWord()base.StarWord();Console.WriteLine(销售产品);,4、在主函数中调用类中的方法:,class Program static void Main(string args)Employee emp=new Employee4;emp0=new Manager(张三);emp1=new Se

32、ller(李四);emp2=new Seller(王五);foreach(Employee e in emp)e.StarWord();,2.6.3 抽象类,抽象类使用abstract修饰符,它不能直接实例化,只能被其他类继承。在继承的类中必须对抽象类中的抽象方法进行重写,不然该派生类依然是抽象的。在VS2008中建立一个名称为“abstracts”的控制台应用程序,在Program.cs文件中输入以下代码:,namespace abstracts abstract public class Window/抽象的类 public Window(int top,int left)this.top

33、=top;this.left=left;abstract public void DrawWindow();/抽象的方法,只能声明不能实现 protected int top;protected int left;public class ListBox:Window/Window类被重载 public ListBox(int top,int left,string contents):base(top,left)listBoxContents=contents;public override void DrawWindow()/覆写 Console.WriteLine(Writing str

34、ing to the listbox:0,listBoxContents);private string listBoxContents;,class Program static void Main(string args)Window winArray=new Window3;winArray0=new ListBox(1,2,Fist List Box);winArray1=new ListBox(3,4,Second List Box);for(int i=0;i 2;i+)winArrayi.DrawWindow();,2.6.4 函数重载,1、函数重载的定义是:函数名称一样函数的参

35、数列表必须不相同返回值类型可以不相同2、在VS2008中建立一个名称为“overloads”的控制台应用程序,在Program.cs文件中输入以下代码:,namespace overloads class Program public void Func()Console.WriteLine(Func();public void Func(int x,int y)Console.WriteLine(Func(int x,int y);static void Main(string args)Program myOverload=new Program();myOverload.Func();m

36、yOverload.Func(1,1);,2.6.5 装箱,任何对象都是从Object对象继承来的。所以任何对象都可以给Object对象的实例赋值。给Object对象赋值的过程称之为装箱(Boxing),反之为拆箱(Unboxing)。在VS2008中建立一个名称为“Boxings”的控制台应用程序,在Program.cs文件中输入以下代码:,namespace Boxings class Program static void Main(string args)int i=123;object o=i;/装箱 int j=(int)o;/拆箱,必须是显式转换 Console.WriteLine(j:0,j);,

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

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号