1、C#程序设计语言程序设计语言学习内容学习内容oC#语言概述o基本语法 o数组 o控制语句 o面向对象设计 C#语言概述oC#语言是微软公司设计的一种编程语言,是从C和C+派生来的一种简单、现代、面向对象和类型安全的编程语言。oC#是一种对大小写敏感的语言,在C#程序中,同名的大写和小写代表不同的对象,因此在输入关键字、变量和函数时必须使用适当的字符。o对于关键字基本上都采用小写。o对于私有变量的定义一般都以小写字母开头、而公共变量的定义则以大写字母开头,C#语言概述o在一个开发语言中,注释也是非常重要。C#提供了两种注释的类型:1.第一种是:单行注释,注释符号是“/”,例如:int a;/一个
2、整型变量,存储整数 2.第二种是:多行注释,注释符号是“/*”和“*/”,任何在符号“/*”和“*/”之间的内容都会被编译器忽略,例如:/*一个整型变量,存储整数*/int a;3.XML注释符号“/”也可以用来对C#程序进行注释,例如:/一个整型变量 /存储整数 int a;C#语言概述o每一句C#程序都要以语句终止符来终结,C#的语句终止符是“;”。例如:int a;o在C#程序中,可以在一行中写多个语句,但每个语句都要以“;”结束,也可以在多行中写一个语句,但要在最后一行中以“;”结束。例如:int a;string s;float f;/一行中多个语句o语句块 在C#程序中,把用符号“
3、”和“”包含起来的程序称为语句块。语句块在条件和循环语句中经常会用到,主要是把重复使用的程序语句放在一起以方便使用,这样有助于程序的结构化。基本语法 o语法是一种程序语言最基本的定义规范,只要按照语法给出的规则才能编写出正确的程序。oC#程序基本语法包括:数据类型的种类,变量和常量的声明和使用以及语句的基本组成表达式和运算符。oC#的数据类型包括值类型、引用类型和指针类型。指针类型是不安全类型,一般不推荐使用。基本语法o值类型包括简单类型(如字符型、浮点型和整数类等)、枚举类型和结构类型。所有的值类型都隐含地声明了一个公共的无参数的构造函数,这个构造函数返回一个初始为零的值类型的实例。例如,对
4、于字符型,默认值是“x0000”;对于float,默认值是0.0F。(1)简单类型:它是C#预先定义的结构类型,简单类型用关键字定义,这些关键字仅仅是在System命名空间里预定义的结构类型的化名,比如关键字int对应System.Int32。简单类型以下的数据类型:sbyte:字节型,-128到127 short:短整型,-32768到32767 int:整型,-2147483648到2147483647 long:长整型,-9.2e18到9.2e18 float:浮点型,-3.4e38到3.4e38 double:双精度浮点型,-1.8e308到1.8e308 char:字符型 bool:
5、布尔型true或flase 基本语法 (2)集合类型:它是C#中一种轻量级的值类型,用来表达一组特定的值的集合行为,以enum关键字进行声明。(3)结构类型:它是用来封装小型的相关变量组,把它们封装成一个实体来同一使用,以struct关键字进行声明。基本语法o引用类型包括类类型、对象类型、字符串类型、接口类型、委托类型和数组类型等。o引用类型与值类型的不同之处是值类型的变量值直接包含数据,而引用类型的变量把它们的引用存储在对象中。o引用类型:(1)字符串类型:直接从object中继承而来的密封类。String类型的值可以写成字符串文字的形式。例如:”123”、”hello world”是字符串
6、类型。基本语法 (2)接口类型:一个接口声明一个只有抽象成员的引用类型,接口仅仅存在方法标志,但没有执行代码,以关键字interface进行声明。(3)委托类型:委托引用一种静态的方法或对象实例,引用该对象的实例方法,与c/c+中的指针类似,以关键字delegate进行声明。基本语法o变量,就是在程序的运行过程中其值可以被改变的量,变量的类型可以是任何一种C#的数据类型。o所有值类型的变量具有实际存在于内存中的值,也就是说当将一个值赋给变量是执行的是值拷贝操作。o变量的定义格式为:1.变量数据类型 变量名(标识符);含义是声明了一个变量,并没有对变量进行赋值,此时变量使用默认值。2.变量数据类
7、型 变量名(标识符)变量值;含义是声明定义变量的同时对变量进行了初始化,变量值应该和变量数据类型一致 基本语法o常量,就是在程序的运行过程中其值不能被改变的量。o常量的类型也可以是任何一种C#的数据类型。o常量的定义格式为:const 常量数据类型 常量名(标识符)常量值;o“常量值”的类型要和常量数据类型一致,如果定义的是字符串型,“常量值”就应该是字符串类型,否则会发生错误。例如:1.const double PI=3.1415926;/定义了一个double类型的常量 2.const string VERSION=Visual Studio 2019;/定义了一个字符串型的常量基本语法o
8、表达式是可以运算的代码片段,表达式可以包括运算符、方法调用等,表达式是程序语句的基本组成部分,例如:1.int num=5;/定义一个整型变量num,并对其赋值 2.string str=“你好,世界!”;/定义一个字符串变量,并对其赋值o运算符是数据运算的术语和符号,它接受一个或多哥称为操作数的表达式作为输入并返回值。C#中的运算符非常的多,从操作数上划分运算符大致分为3类:v一元运算符:处理一个操作数,只有几个一元运算符。v二元运算符:处理两个操作数,大多数运算符都是二元运算符。1.三元运算符:处理三个操作数,只有一个三元运算符。基本语法o从功能上划分,运算符主要分为:算术运算符,赋值运算
9、符,关系运算符,条件运算符,位运算符和逻辑运算符。例如:1.i+;/一元运算,变量i自动加1 2.num=2+3;/二元运算,变量num等于2加3的和 3.result=a b?100:-10 /三元运算,条件运算符,根据条件的真假来决定运算的正确性 o表达式中的运算符按照运算符优先级的特定顺序计算 基本语法o数组是包含若干个相同类型数据的集合,数组的数据类型可以是任何类型。数组可以是一维的,也可以是多维的。o数组的维数决定了相关数组元素的下标数,一维数组只有一个下标。o一维数组通过声明方式如下:数组类型 数组名;声明方式说明:数组类型”是数组的基本类型,一个数组只能有一个数据类型。数组的数据
10、类型可以是任何类型,包括前面介绍的枚举和结构类型。基本语法o数组声明以后,就可以对数组进行初始化了,数组必须在访问之前初始化。o数组的初始化有两种方式:第一种是在声明数组的时候进行初始化;第二种是使用new关键字进行初始化。o数组中的所有元素值都可以通过数组名和下标来访问,数组名后面的方括号中指定下标。数组的第一个元素的下标是0,第二个元素的下标是1,依此类推。例如:1.int vector=80,90,100,66;/定义并初始化了一个有四个元素的数组vector 2.vector2=99;/使用vector 2访问该数组的第3个元素 基本语法o多维数组有多个下标,例如二维数组和三维数组声明
11、的语法分别为:1.数组类型 ,数组名;2.数组类型 ,数组名;o多维数组可以在声明的时候初始化,也可以使用new关键字进行初始化。o初始化时数组的每一行值都使用括号包括起来,行与行间用逗号分隔。o要访问多维数组中的每个元素,只需指定它们的下标,并用逗号分隔开.。例如;1.int,mypoint=0,1,2,3,6,9;/声明并初始化了一个3*2的二维数组 2.int mypoint=new int32 0,1,2,3,6,9;/使用new关键字进行初始化 3.int num=mypoint0,1 /访问mypoint数组第一行中的第2列数组元素控制语句 o语句是程序的基本组成部分,正是一句句语
12、句组成了程序。在C#中,除了单行语句外,还有一些复杂的语句,用来帮助完成比较复杂逻辑程序。o条件语句 条件语句通过判断条件是否为真来执行相应的语句块。在C#中,有两种形式的的条件语句结构:if语句和switch语句。1if语句 if语句的语法如下:if(条件)执行的语句;else 执行的语句;控制语句oif语句根据条件的真假来执行相应的语句块,如果条件为真,则执行if语句块,若为假,则执行else语句块。oif语句还有几个变化的结果形式,可以单独使用if语句,而不加else语句,如果有多个条件需要判断,也可以通过添加else if语句。控制语句 2.switch语句根据对应的条件来执行相应的语
13、句块,主要用于需要判断的条件情况比较多情况。switch语句结构形式如下:switch case 条件1:执行的语句;break;case 条件n:执行的语句;break;default:执行的语句;break;控制语句oC中的循环语句有四种:do-while循环,while循环,for循环和foreach循环。1.do-while循环 do-while语句根据其布尔表达式的值有条件的执行它的嵌套语句一次或者多次,程序从会首先执行一次循环代码,然后判断布尔表达式的值,如果值为true就从do语句位置开始重新执行循环代码,一直到布尔表达式的值为false。其语法定义如下:do 循环代码 whil
14、e(布尔表达式);控制语句 2.while循环 while循环非常类似于do-while循环,二者有一个重要的区别:while循环中的布尔测试是在循环开始时进行,而do-while循环是在最后检测。其语法定义如下:while(布尔表达式)循环代码 控制语句 3.for循环 for循环是最常用的一种循环语句,这类循环可以执行指定的次数.首先计算列初始表达式的值,接下来当条件成立时,执行其嵌套语句,之后计算重复表达式的值并根据其值决定下一步的操作。for循环的语法定义如下:for(循环变量初始化;循环条件;循环操作)循环代码 控制语句 4.foreach循环 foreach语句列举出一个集合(co
15、llection)中的所有元素,使用括号中的类型和标识符用来声明该语句的循环变量,并执行关于集合中每个元素的嵌套语句。foreach语句的语法定义如下:foreach(类型 标识符 in 表达式)循环代码 控制语句o跳转语句:进行无条件跳转,C#为此提供了如下五个语句:vbreak语句:终止并跳出循环,用于跳出包含它的switch,while,do,for或者foreach语句。vcontinue语句:终止当前的循环,重新开始一个新的循环。vgoto语句:跳转到指定的位置,建议不要使用goto语句,因为该语句可能会破坏程序的结构性。vreturn语句:跳出循环及其包含的函数1.throw语句:
16、抛出一个异常面向对象设计 o面向对象的程序设计(OOP:Object-Oriented Programming)是一种基于结构分析的、以数据为中心的程序设计方法。o其主要思想是将数据及处理这些数据的操作都封装(Encapsulation)到一个称为类(Class)的数据结构中,使用这个类时,只需要定义一个类的变量即可,这个变量叫做对象(Object)。面向对象设计o在C#中,类是一种功能强大的数据类型,而且是面向对象的基础。类定义属性和行为,程序员可以声明类的实例,从而可以利用这些属性和行为。o类具有如下特点:vC#类只支持单继承,也就是类只能从一个基类继承实现。v一个类可以实现多个接口。v类
17、定义可以在不同的源文件之间进行拆分。1.静态类是仅包含静态方法的密封类。面向对象设计o类其实是创建对象的模板,类定义了每个对象可以包含的数据类型和方法,从而在对象中可以包含这些数据,并能够实现定义的功能。o类的声明的结构形式如下:class 类名 字段列表;方法列表;面向对象设计o在C#中,类可包含如下几种成员:v字段,字段是被视为类的一部分的对象实例,通常用来保存类数据,一般为私有成员。v 属性,属性是类中可以像类中的字段一样访问的方法。属性可以为类字段提供保护,避免字段在对象不知道的情况下被修改。v方法,方法定义类可以执行的操作。v事件,事件是向其他对象提供有关事件发生通知的一种方式,事件
18、是使用委托来定义和出发的。v构造函数,构造函数是第一次创建对象时调用的方法,用来对对象进行初始化。v析构函数,析构函数是对象使用完毕后从内存中清理对象占用的资源,在C#中一般不需要明确定义析构函数,CLR会帮助解决内存的释放问题。面向对象设计o对象是类的实例化,只有对象才能包含数据,执行行为,触发事件,而类只不过就像int一样是数据类型,只有实例化才能真正发挥作用。o对象具有以下特点:vC#中使用的全都是对象。v对象是实例化的,对象是从类和结构所定义的模板中创建的。v对象使用属性获取和更改它们所包含的信息。v对象通常具有允许它们执行操作的方法和事件。v所有C#对象都继承自Object。1.对象
19、的具有多态性,对象可以实现派生类和基类的数据和行为。面向对象设计o对象的声明就是类的实例化,传递回该对象的引用。此引用引用了新对象,但不包含对象数据本身。o类实例化的方式很简单,通过使用new来实现。例如:1.Point p1=new Point();/使用默认构造函数声明类的对象 2.Point p2=new Point(1,1);/使用指定的构造函数声明类的对象 面向对象设计o继承是面向对象编程的一大特性,通过继承,类可以从其它类继承相关特性。o派生类将获取基类的所有非私有数据和行为以及新类为自己定义的其他数据和行为。o继承实现方式是:在声明类时,在类名称后放置一个冒号,然后在冒号后指定要
20、从中继承的类。例如:类B从类A中继承,类A被称着基类,类B被称着派生类:public class A /定义类A public A()public class B:A /定义类B,继承自类A public B()面向对象设计oC#支持方法重载,这可以让使用相同的名字来创建多个方法,而这些方法具有不同的参数。当调用这些方法时,CLR会根据参数的来选择相应的方法。o使用重载可以同时创建一个方法的不同版本。例如:int Add(int a,int b)/求两个整数的和 return a+b;float Add(float a,b)/求两个浮点数的和 return a+b;这样就可以调用方法Add()来求两个数的和,CLR会根据传进来的参数来调用不同的方法,代码如下:int sum=Add(1,2)/传入的参数是整型,float sumF=Add(1.000000,2.000000);/传入的参数是浮点数