




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章C#语言基础
C#的语法设计借鉴了C/C++的语法,所以有很多地方与C/C++相似。
本章首先介绍C#程序设计基础知识,包括其数据类型、常量和变量、类型转换、运算符和语句结构;然后介绍C#面向对象程序设计的相关知识,包括对象、命名空间、类、域、属性、抽象类、接口、方法、继承和多态等。
C#与.NET的关系3.1
C#语言的特点3.2
C#语法基础3.3语句结构3.4面向对象程序设计3.53.1C#与.NET的关系
图3-1C#家谱3.2C#语言的特点
C#是专门为.NET应用而开发的语言,可以与.NET框架完美结合。在.NET类库的支持下,C#能够全面地表现.NETFramework的各种优点。总的来说,C#具有以下突出的优点。
1.语法简洁 2.彻底的面向对象设计 3.与Web应用紧密结合 4.强大的安全性机制
5.完善的错误、异常处理机制 6.灵活的版本处理技术 7.兼容性3.3C#语法基础
3.3.1数据类型 .NETFramework是一种跨语言的框架。为了在各种语言之间交互操作,部分.NETFramework指定了类型中最基础的部分,这称之为通用类型系统(CommonTypeSystem,CTS)。
C#支持CTS,其数据类型包括基本类型(类型中最基础的部分),如int、char、float等,也包括比较复杂的类型,如string、decimal等。
作为完全面向对象的语言,C#中的所有数据类型是一个真正的类,具有格式化、系列化以及类型转换等方法。
根据在内存中存储位置的不同,C#中的数据类型可分为如下两类: ● 值类型:该类型的数据长度固定,存放于栈内; ● 引用类型:该类型的数据长度可变,存放于堆内。
1.值类型 C#内置的值类型是最基本的数据类型,如整数、浮点数、布尔、字符类型等。(1)整数类型
(2)浮点数
(3)布尔型
(4)字符型
(5)结构一个结构(struct)是包含多个基本类型或复合类型的统一体,在C#中可以使用struct关键字创建结构。
(6)枚举 枚举(enum)其实是一个整数类型,用于定义一组基本整数数据,并可以给每个整数指定一个便于记忆的名字。
2.引用类型(1)内置引用类型
(2)数组 C#把数组看作一个带有方法和属性的对象,并存储在堆内存中。同C风格类似,声明数组时,要在变量类型后面加一组方括号。
(3)类、接口 类在C#和.NETFramework中是最基本的用户自定义类型。
接口用于实现一个类的定义,包括属性、方法的定义等,但没有具体的实现,也不能实例化接口。
3.3.2变量和常量 变量用来描述一条信息的名称,在变量中可以存储各种类型的信息。
1.变量 在C#中,使用变量的基本原则是:先定义,后使用。
首先来看为变量命名的方法,C#中的变量命名规范如下:(1)必须以字母或下划线开头。
(2)只能由字母、数字、下划线组成,不能包含空格、标点符号、运算符以及其他符号。(3)不能与C#关键字同名,如class、new等。
2.常量 同变量一样,常量也用来存储数据,它们的区别在于,常量一旦初始化就不再发生变化,可以理解为符号化的常数。
常量的声明和变量类似,需要指定其数据类型、常量名以及初始值,并需要使用const关键字,例如: [public]constdoublePI=3.1415;
其中,[public]关键字可选,是变量的作用域,并可用private、protected、internal或new代替。这5个关键字的含义如下。
● public:全局变量。 ● private:局部变量。 ● protected:受保护变量。 ● internal:可在同一个链接库中访问。 ● new:创建新变量,不继承父类同名变量。
3.3.3类型转换 在高级语言中,数据类型是很重要的一个概念,只有具有相同数据类型的对象才能够互相操作。
很多时候,为了进行不同类型数据的运算(如整数和浮点数的运算等),需要把数据从一种类型转换为另一种类型,即进行类型转换。C#有两种转换方式。
● 隐式转换:无需指明转换,编译器自动将操作数转换为相同的类型。 ● 显式转换:需指定把一个数据转换成其他类型。
1.隐式转换
2.显示转换 显示类型转换,又叫做强制类型转换。
3.装箱和拆箱 ● 封箱:把值类型转换为引用类型,可以隐式转换 ● 拆箱:把引用类型转换为值类型,需显式转换
3.3.4运算符 C#中的运算符是用来对变量、常量或数据进行计算的符号,它指挥计算机进行符号表示的操作。
1.算数运算符
2.字符串运算符 字符串运算符(stringoperator)只有一个,就是加号“+”。
3.赋值运算符
4.逻辑运算符
5.位运算符
6.其他运算符
7.运算符的优先级
3.4语句结构
前面3节介绍了变量、常量和运算符,三者是构成每行C#语句的必要元素。在这一节中,将在另一个层次介绍如何控制一段代码的整体结构。
同其他高级语言类似,C#的程序结构除顺序结构外,主要有分支结构和循环结构,另外C#还支持无条件跳转。
3.4.1条件语句 1.if语句 if语句是最常用的条件语句,它通过判断布尔表达式的值,选择执行后面的内嵌语句。if语句有3种格式。
(1)第1种只判断了1次,表示发生了某事则怎样处理,结构如下所示:
if(expression) { statement }
(2)第2种表示发生了某事则怎样处理,否则该如何解决。
结构如下所示:
if(expression) { statement1 } else { statement2 }
(3)第3种表示嵌套使用if…else进行多个条件的判断。
结构如下所示:
if(expression1) { statement1 }
elseif(expression2) {
statement2 } else { statement3 }
2.switch语句 当程序面临多叉路口时,就可以使用swtich语句进行分支。
switch(variable){casevalue1:statement1break;
casevalue2:statement2break;…
default:statementbreak;}
3.4.2循环语句 1.while循环语句 当程序需要不停执行某种功能直到达到某种条件才停止时,需要采用循环程序结构。
(1)while循环用来在指定的条件内不断地重复指定的动作。语法如下: while(expression) { statement }
(2)do...while循环则先执行一次语句,再判断是否要继续执行,也就是说循环至少执行一次。语法如下: do { statement }while(expression);
2.for循环语句 For语句同样用来实现循环结构,同while功能类似,语法为: for(expression1;expression2;expression3) { statement }
expression1:条件的初始值。 expression2:判断的条件,通常用逻辑运算符作为判断的条件。
expression3:执行statement后要执行的语句,用来改变条件供下次循环判断,如累加等。 statement:符合条件时的执行语句,若程序只有一行,可以省略大括号。
3.4.3控制循环 在循环中如果突然想结束循环时,需要使用跳转语句break或continue语句。
3.4.4异常处理语句 C#提供了异常处理机制,允许开发者捕捉程序运行时可能的异常。
C#使用try、catch和finally关键字类定义异常代码块。
3.4.5条件编译 在开发过程中,使用条件编译必不可少,这样就可以有条件地选择需要执行的代码。
首先,在进行条件选择前,需要使用预定义指令和取消预定义指令;(1)define:建立一个预定义符号;(2)undef:取消一个预定义符号。
其中,#define定义的符号必须放在文件的首行,并且符号将在整个文件中都有效。
然后,可以使用条件判断指令来选择需要编译的代码,选择指令有如下4种:(1)#if;(2)#elif;(3)#else;(4)#endif。3.5面向对象程序设计 面向对象是一种模块化的设计思想,现在被广泛应用于软件设计领域。面向对象是以对象为基础的设计思想。本节将讲述面向对象的基本概念,以及如何使用面向对象的思想来设计。
3.5.1对象的概念 在面向对象思想中,最基本的单元就是对象。对象可以代表任何事物,从个人到整个学校,一个整数到一个数据集合,一滴水到一条大河等,这些都可以看作是一个对象。对象不仅表示有形的实体,也可以表示无形的、抽象的事物,如课程、计划等。
3.5.2面向对象的设计方法
面向对象方法(Object-OrientedMethod)是把面向对象的思想应用于软件的开发中。从程序的角度来看,对象是被封装起来的代码块,或者称之为一个功能模块。在对象中,包含着若干个属性和方法。
面向对象的主要特征有3个:封装性、继承性和多态性。
(1)封装性是把相关联的属性和方法封装为统一的整体,对外只提供访问该对象的信息。使用者不必了解其内部方法的具体实现。
(2)继承性分为单继承和多重继承,其主要目的就是防止对象之间出现大量重复的信息。(3)多态性是不同对象在接收同一个消息时产生的不同动作。多态性是依赖于继承性的。
图3-2UML类图
3.5.3命名空间 命名空间是用来组织类的。通常可以把相关联的类放在一个命名空间中,从而进行有效的管理。本小节将讲述如何定义命名空间并在外面引用。
1.命名空间的概念 组织代码的最基本的单元就是类,把每个类分别写在一个文件中,可以更好地组织代码的结构。但是,有时候还需要组织各个类,把类又再次分类地进行组织起来。Microsoft公司的.NET架构就提供了一种可以组织类的概念,那就是命名空间。
2.命名空间的定义和引用 用户可以自己定义命名空间,以便程序的功能可以更好地得到扩展,代码也可以更加有效合理地组织起来。这里将讲述如何定义和引用命名空间。
(1)命名空间的定义 通常在定义类的时候,可以把它放在命名空间中进行定义。
(2)命名空间的引用 使用命名空间之前要先引用。引用命名空间是利用using关键字,后跟命名空间的名称。
3.5.4类 类是面向对象中最为重要的概念之一,是面向对象设计中最基本的组成模块。类可以简单地看做一种数据结构。本小节将讲述类的概念、如何声明类以及类的成员等。
1.类的概念 在现实生活中,可以找出很多关于类的例子。
从软件设计的角度来说,类就是一种数据结构,用于模拟现实中存在的对象和关系,包含静态的属性和动态的方法。
2.类的声明 C#中类的声明需要使用class关键字,并把类的主体放在花括号中,格式如下: [class-modifiers]classclass-name { //属性
//方法 }
图3-3学生类示例
3.类的成员和访问控制 从类的继承关系上来讲,类的成员可以分为2大类:类本身声明的和从基类继承的。类的成员的类型有以下几种:常量、变量、方法、属性、事件、索引指示器、操作符以及构造函数和析构函数。
从类的访问角度上来讲,类的成员又可以分为4类:公有成员、私有成员、保护成员和内部成员。
(1)公有成员 公有成员定义了一种允许外部访问的方式,使用修饰符public。
(2)私有成员 私有成员只限定在类中的成员访问,外部是不能访问的。如果在声明类成员的时候没有使用修饰符,那么默认就是私有成员,私有成员使用修饰符private。
(3)保护成员 保护成员定义了一种不对外部访问但其子类可以访问的方式,保护成员使用修饰符protected。
(4)内部成员 内部成员定了一种只有包含在同一个命名空间中的类才可以访问的方式,内部成员使用修饰符internal。
4.构造函数和析构函数 构造函数的主要作用是执行类的实例的初始化;析构函数的主要作用就是回收系统占用的资源。
(1)构造函数(2)析构函数
3.5.5域和属性 域和属性都提供了保存类的实例的数据信息的方法。域表示对象或类相关联的变量,属性则实现了数据的封装和隐藏。本小节将重点讲述域和属性的概念和基本用法。
1.域 域可以简单地理解为成员变量,其主要作用是保存数据信息。域的修饰符可以是以下几种:new、public、internal、protected、static和readonly。
2.属性 属性可以看做是实体特征的抽象表现。例如,一个学生的姓名、一个软件的大小、一个班级的人数等,这些都可以作为属性来表示。
属性的声明涉及两个关键字,get和set。 ● get:表示对属性的读操作。 ● set:表示对属性的写操作。
3.5.6抽象类 面向对象编程思想试图模拟现实中的对象和关系。但是,有时候基类并不是与具体的事物相联系的,而是表达一种抽象的概念,抽象类就可以满足这种关系。本小节将讲述抽象类的概念和使用。
1.抽象类的概念 在C#中抽象方法和抽象类的定义如下。
(1)抽象方法:只包含方法定义但没有具体实现的方法,需要其子类或者子类的子类来具体实现。
(2)抽象类:含有一个或多个抽象方法的类称为抽象类。抽象类不能够被实例化,这是因为它包含了没有具体实现的方法。
图3-4运动员及其子类关系
2.抽象类的声明(1)在C#中,使用关键字abstract来定义抽象方法(AbstractMethod),并需要把abstract关键字放在访问级别修饰符和方法返回数据类型之前没有方法实现的部分
(2)子类继承抽象父类之后,可以使用override关键字覆盖父类中的抽象方法,并做具体的实现
3.抽象方法
图3-5运动员抽象类类图
3.5.7接口 接口实际上是定义了一组数据结构,通过这组数据结构可以调用组件对象的功能。接口和抽象类很相似,在本小节中,除了讲解接口的概念和使用外,还会讲述接口与抽象类的区别。
1.接口的概念 接口和抽象类非常相似,它定义了一些未实现的属性和方法。所有继承它的类都继承这些成员,在这个角度上,可以把接口理解为一个类的模板。
2.接口的声明
图3-6IShape接口
3.接口的实现 声明接口之后,类就可以通过继承接口来实现其中的抽象方法。继承接口的语法同类的继承类似,使用冒号“:”,将待继承的接口放在类的后面。如果继承于多个接口,使用逗号将其分隔。
4.接口与抽象类 接口和抽象类非常相似,它定义了一些未实现的属性和方法,所有继承它的类都继承这些成员。
在这个角度上可以把接口理解为一个类的模板。接口和抽象类的相似之处表现在以下两方面:(1)两者都包含可以由子类继承的抽象成员;(2)两者都不能直接实例化。
两者的区别表现在以下几个方面:(1)抽象类除拥有抽象成员之外,还可以拥有非抽象成员,而接口所有的成员都是抽象的;(2)抽象成员可以是私有的,而接口的成员一般都是公有的;
(3)接口中不能含有构造函数、析构函数、静态成员和常量;(4)C#只支持单继承,即子类只能继承一个父类,而一个子类却能够继承多个接口。
3.5.8方法 方法属于类的成员之一,用于执行计算或者其他的行为。在本小节中将讲述如何声明方法、方法的参数、方法的重载等。
1.方法的声明 方法声明的一般格式如下: method-headermethod-body
2.参数 方法的参数是调用方法时传递给它的变量,主要分为两类。
● 传递数据的值:直接把变量的数据值传递给方法。 ● 传递数据的地址:把
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年国产飞机上装用的进口发动机和机载设备翻修合作协议书
- 宁夏高职单招考试2024年语文模拟试卷及参考答案
- 医学类单招入学考试题库及答案(修正版)
- 中考主观题万能答题模板重点知识归纳-2025年中考道德与法治答题技巧与模板构建
- (高清版)DB12∕T 528-2014 种猪场猪瘟净化技术规范
- 中医经络学试题及答案
- 2025年城中村改造项目环评协议
- 2025年合同作废声明模板简易版
- 2025年青苗补偿协议模板
- 庆典策划筹办服务合同(2025年版)
- 读后续写:万能升华主旨句3-脱险型(解析版)-新高考英语读后续写满分攻略
- 初中英语导学案名词 公开课教学设计
- 个人业绩相关信息采集表
- 模具维护保养记录表
- 003-04-PFMEA第五版表格模板-(带实例)-2020.2.3
- 电大行政管理毕业论文细谈我国选人用人机制存在的问题及对策
- 260吨汽车吊地基承载力验算
- 加气站罩棚专项施工方案
- 桂美2011版三年级美术下册《折折剪剪》说课稿
- 托玛琳专业知识教学课件
- 部编版八年级语文下册《时间的脚印》评课稿
评论
0/150
提交评论