C#入门经典教程ppt课件.ppt_第1页
C#入门经典教程ppt课件.ppt_第2页
C#入门经典教程ppt课件.ppt_第3页
C#入门经典教程ppt课件.ppt_第4页
C#入门经典教程ppt课件.ppt_第5页
已阅读5页,还剩426页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第1章C 与NET平台介绍本章目标 了解 NETFramework的结构理解 NETFramework的基本概念CLRJITCTSMSIL了解 NETFramework命名空间了解C 程序的基本结构 1C 语言的由来 在过去的二十年里 C和C 已经成为在商业软件的开发领域中使用最广泛的语言 它们为程序员提供了十分灵活的操作 不过同时也牺牲了一定的开发效率 与VB等语言相比 同等级别的C C 应用程序往往需要更长时间来开发 由于C C 语言的复杂性 许多程序员都试图寻找一种新的语言 希望能在功能与效率之间找到一个更为理想的权衡点 VB以牺牲灵活性的代价来提高效率 可是这些灵活性正是C C 程序员所需要的 这些解决方案对编程人员的限制过多 如屏蔽一些底层代码控制的机制 所提供的功能难以令人满意 这些语言无法方便地同早先的系统交互 也无法很好地和当前的网络编程相结合 对于C C 用户来说 最理想的解决方案无疑是在快速开发的同时又可以调用底层平台的所有功能 他们想要一种和最新的网络标准保持同步并且能和已有的应用程序良好整合的环境 另外 一些C C 开发人员还需要在必要的时候进行一些底层的编程 C Csharp 是对这一问题的解决方案 C 是一种新的 面向对象的编程语言 它使得程序员可以快速地编写各种基于Microsoft NET平台的应用程序 Microsoft NET提供了一系列的工具和服务来最大程度地开发利用计算与通讯领域 C 语言的特点 C 语言是Microsoft发布的一种全新的编程语言 是其 Net战略的一枚重要棋子 C 语言是面向对象的 现代的编程语言 用C 编写的应用程序可以充分利用 Net的框架体系带来的优点 既可以用来编写基于通用网络协议的Internet服务软件 也可以编写各种数据库 网络服务应用程序和Windows窗口界面程序 C 继承了C C 的优点和灵活性 能够充分利用OS系统的底层功能 同时又具备了完全的面向对象特性 可以让初学者直接了解面向对象编程的各种概念 学习现代的编程思想和手段 2 NET代码的编译语言特定的编译器和运行库 代码被执行 IL 元数据 CLR IL和CLR的使用IntermediateLanguageCommonLanguageRuntime 编译执行 NET程序 Microsoft中间语言 MSIL 元数据 机器代码 代码被执行 CLR MSIL 帮助语言实现互操作 IL不是字节代码 但很接近字节代码 因此 执行应用程序时 IL到机器码的转换速度非常快 通过CLR将MSIL转换为具体CPU的代码 CPU无关的指令集 语言编译器 NET源代码 程序集 client exe client exe clientlib dll client exe module IL语言范例 IL 0000 nopIL 0001 callIL 0006 nopIL 0007 ldc i4 0IL 0008 callIL 000d nopIL 000e ldnullIL 000f ldftnIL 0015 newobjIL 001a callIL 001f nopIL 0020 newobjIL 0025 callIL 002a nopIL 002b newobjIL 0030 throw 通用语言运行时CLR NET的语言互操作性 不同语言编写的代码可互相调用C 的平台移植性 框架JIT编译器 JustInTime 即时编译器 3 NETFramework简介 NETFramework类似于JVM NETFramework两个主要组件 通用语言运行时 CLR 统一的类库集 NET的类库 线程文件输入 输出 I O 数据库支持XML解析数据结构 NETFramework的体系结构 VisualStudio NET CLR通用语言运行时 CLR BaseClassLibrary IO Drawing Threading DataandXML XMLWebservices WindowsForms WebForms 通用语言规范 CLS VB C C JScript 操作系统 NetFramework类库 FCL CLS和CTS 通用语言规范CLSCommonLanguageSpecification规定所有 NET语言都应遵循的规则生成可与其他语言互操作的应用程序通用类型系统 CommonTypeSystem CTS 包含标准数据类型包含准则集 CLS CTS和MSIL紧密配合以实现语言互操作性 命名空间就像在文件系统中一个文件夹容纳多个文件一样 可以看作某些类的一个容器 通过把类放入命名空间可以把相关的类组织起来 并且可以避免命名冲突 命名空间既用作程序的 内部 组织系统 也用作 外部 组织系统 一种向其他程序公开自己拥有的程序元素的方法 使用命名空间 using类似 include 4命名空间 1 HclassA 2 HclassA 3 cpp include 1 h include 2 h 3 cppclassA classA namespacea1 classA namespacea2 classA 3 csusinga1 usinga2 a1 Aa2 A 常用命名空间 5创建 HelloWorld 应用程序 单击 开始 程序 MicrosoftVisualStudio NET2005 MicrosoftVisualStudio NET2005 此时将打开VS NET2005的起始页要创建C 控制台应用程序 请从列表中选择 创建建 项目 此时将打开 新建项目 窗口选择 VisualC 项目 作为项目类型 选择 控制台应用程序 作为模板 C 模板 Console WriteLine HelloWorld 输出 HelloWorld csprojAssemblyInfo csProgram cs HelloWorld 应用程序文件 编译和执行C 应用程序 要生成C 项目 请从菜单中选择 生成 生成解决方案 该过程将编译项目中包括的所有文件 编译结果显示在 输出 窗口中如果结果显示 生成 1成功或最新 0失败 0被跳过 则说明已经成功生成 然后即可交付该应用程序 要运行刚才生成的应用程序 请从菜单中选择 调试 开始执行 不调试 输出结果显示在VS NET控制台窗口中 C 应用程序文件夹结构 VisualStudio NET2005创建一个与项目同名的文件夹 此处为 HelloWorld 该文件夹包含项目文件 HelloWorld csproj 和其他关联文件每个新项目都创建了bin obj和Properties三个文件夹 Bin和obj这两个文件夹下都有一个Debug子目录 其中包含可执行文件HelloWorld exe在 解决方案资源管理器 中启用 显示所有文件 选项 可查看 HelloWorld 项目的结构 这是用C 编写的一个简单的HelloWorld程序usingSystem namespaceNotepad classHelloWorld staticvoidMain Console WriteLine HelloWorld 声明HelloWorld类 描述代码的注释 HelloWorld程序 程序入口点 Main的返回类型为void 控制台类的WriteLine 方法用于显示输出结果 导入System命名空间 声明命名空间Notepad 将文件保存为 cs 说明 1 程序一般包括以下几部分 名称空间的引用 使用using关键字指明引用的名称空间 名称空间的声明 使用namespace关键字声明名称空间 类 使用class关键字声明类 Main方法 Main方法是C 程序的入口 2 类中包含了程序所要用到的数据和所要执行的方法的定义 每个类中可以有 1 变量声明 2 构造函数 3 方法 4 属性 5 事件3 一个文件中可以有1个或者多个类 4 所有语句都以分号 结束 C 语言基础 第2章 目标 在C 中定义变量和常量使用C 中的基本数据类型理解装箱和拆箱的概念使用C 中的运算符 选择结构和循环结构定义和使用数组 了解结构和枚举了解C 中的预处理指令理解C 中常用的字符串处理方法 第一个C 程序 HelloWorld usingSystem classHelloWorld staticvoidMain Console WriteLine Hello World HelloWorld cs 第一个C 程序 HelloWorld 1 usingSystem 第1行 using关键字用来引用 NET框架类库中的资源通常在程序文件的开头使用如果程序中需要多种资源 可以使用多次usingSystem命名空间System命名空间提供了构建应用程序所需的系统统能的访问 第一个C 程序 HelloWorld 2 classHelloWorld3 8 第2 3 8行 类在C 或其他面向对象语言中 需要编写类使用关键字class定义一个类 类的内容放在一对 中示例中定义了一个名为HelloWorld的类 第一个C 程序 HelloWorld 4 staticvoidMain 5 7 第4 5 7行 Main方法Main方法是应用程序的入口点 编译器将由该处开始执行程序方法体也放在一对 中每个C 的应用程序都必须包含Main方法 4 staticvoidMain 5 7 第4 5 7行 Main方法static表示Main方法是一个全局方法void表示Main方法没有任何返回值 即返回值是空参数放在小括号中定义 此处括号内没有内容 表明Main方法没有任何参数 第一个C 程序 HelloWorld 6 Console WriteLine Hello World 第6行 语句在C 中要执行的指令语句之间用 分隔 编译器通过分号来区分多个语句使用大括号 标识某个代码块的开始和结束 从而可以对语句进行组合 大括号必须成对匹配 第一个C 程序 HelloWorld 6 Console WriteLine Hello World 第6行 语句HelloWorld程序的主要目的就是在屏幕上显示一条问候WriteLine方法用来将问候语写到标准输出设备上 Console代表标准输出设备 屏幕 它属于System命名空间WriteLine方法是Console类的方法 访问类或对象的方法使用点取符 来完成 字符串用双引号 表示字符串 Hello World 是WriteLine方法的参数 表示屏幕输出的内容 第一个C 程序 HelloWorld 系统预定义类型 系统预定义类型 字面量 int intiMax int MaxValue intpVal int Parse 100 shorti16 50 inti32 i16 i16 i32 错误i16 short i32 decimaldecimaliRate 3 9834M iRate decimal Round iRate 2 四舍五入iRate decimal Remainder 512 0M 51 0M boolboolbt bool 1 错误charstringpattern 123abcd boolbt bt char IsLetter pattern 3 bt char IsNumber pattern 3 bt char IsLower pattern 3 bt char IsPunctuation pattern 7 bt char IsLetterOrDigit pattern 3 single doublefloatf 24567 66f doubled 124 45 If Single IsNaN 1 0 使用Parse转换数字字符串shortshParse Int16 Parse 100 intiParse Int32 Parse 100 longshParse Int64 Parse 100 decimaldParse decimal Parse 99 99 floatsParse float Parse 99 99 doubledParse double Parse 99 99 字符串 字符串直接量stringpath path C note txt path C note txt 字符串操作索引字符串中的单个字符stringstr abcd charc str 0 字符串连接strings1 Myage intmyAge 28 stringcat s1 myAge 字符串操作抽取和定位子串stringpoem InXanadudidKublaKhan stringpoemSeg poem Substring 10 poemSeg poem Substring 0 9 intindex poem IndexOf I index poem LastIndexOf n 比较字符串boolisMatch stringtitle AncientMariner isMatch title ANCIENTAMRINER isMatch title ToUpper ANCIENTMARINER isMatch title Equals AncientMariner String常用方法 C 中常用的字符串处理方法 Equals 比较两个字符串的值是否相等ToLower 将字符串转换成小写形式IndexOf 查找某个字符在字符串中的位置SubString 从字符串中截取子字符串Join 连接字符串Split 分割字符串Trim 去掉字符串两边的空格 实例 将一文件名的扩展名改为 dat 例 1 txt改为1 dat usingSystem usingSystem Collections Generic usingSystem Linq usingSystem Text namespace 011 classProgram staticvoidMain string args string 1 2 txt intindexDot stringextendName dat 0 indexDot 1 extendName Console WriteLine String常用方法应用1 已有如下代码 按要求增加功能 staticvoidMain string args stringemail 电子邮件地址Console WriteLine 请输入你的邮箱 email Console ReadLine Console WriteLine 你的邮箱是 0 email 需实现的功能 1 输入yes时 程序循环执行2 兼容以下各种形式yes YES yes YeS 3 提取邮箱的用户名 usingSystem usingSystem Collections Generic usingSystem Linq usingSystem Text namespace 011 classProgram staticvoidMain string args while 1 stringemail 电子邮件地址Console WriteLine 请输入你的邮箱 email Console ReadLine Console WriteLine 你的邮箱是 0 email Console WriteLine 继续输入邮箱吗 stringinput Console ReadLine if input ToUpper YES continue elsebreak while true String常用方法应用2 输入一个字符串 输出每个单词 重新用下划线连接输出 使用Split 方法分割字符串使用Join 方法连接字符串 Split 方法 分割字符串 代码分析 splitStrings inputString Split 将分割后的字符串使用下划线连接在一起joinString string Join splitStrings 返回值为字符串数组 字符串变量名 参数 分隔符 char型 返回字符串 静态方法 参数1 连接符参数2 字符串数组 关键代码 Join 方法 连接字符串 usingSystem classProgram staticvoidMain string args stringinputString inputString Console ReadLine inputString inputString Trim string splitStrings inputString Split stringjoinString string Join splitStrings Console WriteLine joinString 如果字符串两边有空格 Format 方法 两种输出字符串的方式 stringname 李四 Console WriteLine Mynameis name Iam 18 stringname 李四 Console WriteLine Mynameis 0 Iam 1 name 18 格式字符串 变量列表 String类的Format 方法用来格式化字符串 关键代码 record string Format 姓名 0 n出生年月 1 n身高 2 n血型 3 n星座 4 n最喜欢的食物 5 name birthday height bloodType planet favourFood Console WriteLine n这是你的个人档案 Console WriteLine record 参数与WritLine 方法相似 Format 的语法小结 stringmyString string Format 格式字符串 参数列表 stringmyString string Format 0 乘以 1 等于 2 2 3 2 3 格式字符串 代表 参数列表 2乘以3等于6 包括占位符 x 小结 补充下划线处的占位符 输出五个成语 stringyi 一 stringer 二 stringsan 三 stringword string Format 独 无 心 意 垂涎 尺 略知 举 反 yi er san Console WriteLine word stringyi 一 stringer 二 stringsan 三 stringword string Format 独 0 无 1 2 心 1 意 垂涎 2 尺 略知 0 1 举 0 反 2 yi er san Console WriteLine word 枚举 accessmodifiers enum enum base enumbody classMyApp enumFabric int Cotton 1 Silk 2 Wool 4 staticvoidMain Fabricfab Fabric Cotton intfabNum int fab stringfabType fab ToString Console WriteLine fab 整型 默认为int 默认为internal 枚举和位标志 namespaceMyHelloApp classmyApp Flags enumFabric Cotton 1 Silk 2 staticvoidMain Fabricfab1 Fabric 3 Console WriteLine fab1 ToString System Enum的方法 usingSystem namespaceApp1 classmyApp enumFabric Cotton 1 Silk 2 staticvoidMain stringfabStr Cotton if Enum IsDefined typeof Fabric fabStr Fabricfab Fabric Enum Parse typeof Fabric fabStr Console WriteLine Enum GetName typeof Fabric 2 变量 staticvoidMain string args 声明布尔型 字符串型 整型 短整型和浮点型变量boolt false shortn1 30 intn2 1200 stringstr jeny floatn3 23 1f 显示变量值Console WriteLine 布尔值 t Console WriteLine 短整型值 n1 Console WriteLine 整型值 n2 Console WriteLine 字符串值 str Console WriteLine 浮点值 n3 变量中存储的值取决于该变量的类型 常量 staticvoidMain string args PI常量PIconstfloat pi 3 1415169F 由地球引力引起的加速度常量 单位为cm s sconstfloat gravity 980 钟摆的长度intlength 60 钟摆的周期doubleperiod 0 钟摆周期的计算公式period 2 pi Math Sqrt length gravity Console WriteLine 钟摆的周期为 0 秒 period 声明常量 在表达式中使用常量 const关键字用于声明常量 数组 数组是同一数据类型的一组值数组属于引用类型 因此存储在堆内存中数组元素初始化或给数组元素赋值都可以在声明数组时或在程序的后面阶段中进行语法 数据类型 数组名称 new类型 n int arrayHere newint 6 数组 staticvoidMain string args intcount Console WriteLine 请输入准备登机的乘客人数 count int Parse Console ReadLine 声明一个存放姓名的字符串数组 其长度等于乘客人数string names newstring count 用一个for循环来接受姓名for inti 0 i count i Console WriteLine 请输入第 0 个乘客的姓名 i 1 names i Console ReadLine Console WriteLine 已登机的乘客有 用foreach循环显示姓名foreach stringdispinnames Console WriteLine 0 disp 数组声明 初始化数组元素的循环 显示输出的循环 一维数组和多维数组都属于矩形数组 而C 所特有的不规则数组是数组的数组 在它的内部 每个数组的长度可以不同 就像一个锯齿形状 1 不规则数组的声明语法形式 type arrayName 方括号 的个数与数组的维数相关 例如 int jagged jagged是一个int类型的二维不规则数组 2 创建数组对象以二维不规则数组为例 3 不规则数组 structstructEx publicintstructDataMember publicvoidstructMethod1 structMethod1实现 自定义数据类型可以在其内部定义方法无法实现继承属于值类型主要结构 structstudent publicintstud id publicstringstud name publicfloatstud marks publicvoidshow details 显示学生详细信息 结构 数据成员 方法 所有与Student关联的详细信息都可以作为一个整体进行存储和访问 C 的基本数据类型 C 中的数据类型分为两个基本类别值类型表示实际数据只是将值存放在内存中值类型都存储在堆栈中int char 结构引用类型表示指向数据的指针或引用包含内存堆中对象的地址为null 则表示未引用任何对象类 接口 数组 字符串 C 的基本数据类型 staticvoidMain string args 声明一个值类型的整型数据类型intvalue 130 Console WriteLine 该变量的初始值为 0 value Test value 由于该数据类型属于值类型 所以将恢复其初始值Console WriteLine 该变量的值此时为 0 value staticvoidTest intbyVal intt 20 byVal t 30 将value的初始值传递给Test 方法 不反映已经改变的val值 而保留原始值 C 的基本数据类型 staticvoidMain string args DataTypeobjTest newDataType objTest Value 130 传递属于引用类型的对象Test objTest 由于该数据类型属于引用类型 所以会考虑新处理的值Console WriteLine 变量的值为 0 objTest Value staticvoidTest DataTypedata intt 20 data Val temp 30 将DataTypeTest的引用传递给Test 被传递的value在Test 中改变 反映已经改变的value值 classDataType publicintValue 引用类型和值类型 System Object方法 引用类型和值类型的内存分配 值类型存储在运行栈 引用类型存储在托管堆ApparelmyApparel newApparel ApparelmyApparel1 myApparel ClassApparel publicdoublePrice 250 0 publicstringFabType Syn 栈 托管堆 装箱与拆箱 装箱即将值类型转换为引用intage 17 ObjectrefAge age拆箱即将引用类型转换为值类型 intnewAge int refAge doublenewAge double refAge 错误 要具有相同类型 运算符和表达式 运算符和表达式 运算符和表达式 运算符和表达式 运算符和表达式9 6 赋值运算符 变量 表达式 例如 身高 177 5 体重 78 性别 m 运算符和表达式9 7 一元运算符 Variable 相当于Variable Variable 1 Variable 相当于Variable Variable 1 运算符和表达式 运算符和表达式 C 运算符的优先级 选择结构 语法 if else 选择结构用于根据表达式的值执行语句 if else 条件 只能是bool类型的值 选择结构 switch cotton case COTTON case cotton break case值3 case值4 break switch case 表达式可以是int 字符或字符串C 不允许从一个case块继续执行到下一个case块 每个case块必须以一个跳转控制语句break goto或return结束多个case标签可以对应一个代码块 循环结构 循环结构用于对一组命令执行一定的次数或反复执行一组命令 直到指定的条件为真 循环结构的类型while循环do循环for循环foreach循环 条件 只能是bool类型的值 while循环反复执行指定的语句 直到指定的条件为真语法 while 条件 语句 break语句可用于退出循环continue语句可用于跳过当前循环并开始下一循环 while循环 do while循环 do while循环与while循环类似 二者区别在于do while循环中即使条件为假时也至少执行一次该循环体中的语句 语法 do 语句 while 条件 for循环 for循环要求只有在对特定条件进行判断后才允许执行循环这种循环用于将某个语句或语句块重复执行预定次数的情形语法 for 初始值 条件 增 减 语句 foreach循环2 1 foreach循环用于遍历整个集合或数组语法 foreach 数据类型元素 变量 in集合或者数组 语句 foreach循环2 2 staticvoidMain string args 存放字母的个数intLetters 0 存放数字的个数intDigits 0 存放标点符号的个数intPunctuations 0 用户提供的输入stringinstr Console WriteLine 请输入一个字符串 instr Console ReadLine 声明foreach循环以遍历输入的字符串中的每个字符 foreach charchininstr 检查字母if char IsLetter ch Letters 检查数字if char IsDigit ch Digits 检查标点符号if char IsPunctuation ch Punctuations Console WriteLine 字母个数为 0 Letters Console WriteLine 数字个数为 0 Digits Console WriteLine 标点符号个数为 0 Punctuations 为所有计数器设置初始值 接受输入 对输入的每一个字符都进行循环 使用了所有输入的字符之后 循环自动终止 usingSystem publicclassWriteTest publicstaticvoidMain int array 1 2 3 4 5 foreach intiteminarray Console WriteLine item usingSystem publicclassWriteTest publicstaticvoidMain int array 1 2 3 4 5 foreach intiteminarray item item Console WriteLine item C 的预处理指令2 1 预处理指令是C 编译器在词法分析阶段读取的语句 这些语句可以指示编译器包含或不包含某些代码 甚至可以根据预处理指令的值终止编译 预处理指令由字符 标识 并且字符 必须是该行的第一个非空字符 预处理指令最常见的三个用途是 完成条件编译 增加诊断来报告错误和警告 定义代码域 C 的预处理指令2 2 defineCLIENT defineDEBUGusingSystem publicclassMyApp publicstaticvoidMain ifDEBUG INHOUSE warningDebuginon elifDEBUG CLIENT errorDebugnotallowedinClientCode endif 控制台输入和输出 数据输入 Read ReadLine Console Read 方法Console Read方法用来从控制台读取一个字符 其定义如下 PublicstaticintRead Read方法返回所读取的字符的Unicode编码值 注意 Read方法的返回变量是32位的整数 如果需要得到输入的字符 则必须通过数据类型的显式转换才能得到相应的字符 控制台输入和输出 Console Read ReadTest csusingSystem publicclassReadTest publicstaticvoidMain inti charch i Console Read ch char i 显式类型转换Console WriteLine i Console WriteLine ch 运行结果 A65A 控制台输入和输出 Console ReadLine 方法Console ReadLine方法用来从控制台读取一行字符 定义如下 PublicstaticstringReadLine Read方法返回所读取一行字符的字符串 一般情况下 一行输入是指从输入一个字符开始 遇到回车符号为止 控制台输入和输出 ReadLine csusingSystem usingSystem Globalization publicclassReadTest publicstaticvoidMain inti doubled stringstr str Console ReadLine 由控制台输入整数字符串i int Parse str 整数字符串转换为整数Console WriteLine i str Console ReadLine 由控制台输入浮点字符串d double Parse str 浮点字符串转换为浮点数Console WriteLine d 运行结果 12341234123 456123 456 控制台输入和输出 数据输出 WriteWriteLine Console Write 方法Console Write方法用来向控制台输出一个字符 但控制台的光标不会移到下一行 其定义如下 publicstaticvoidWrite XXXvalue publicstaticvoidWrite stringformat objecto1 注意 格式化format同格式化函数Format中的格式化串类似 其格式如下 N M formatstring 其中 字符N表示输出变量的序号 M表示输入变量在控制台中所占的字符空间 如果这个数字为负数 则按照左对齐的方式输出 若为正数 则按照右对齐方式输出 控制台输入和输出 WriteTest csusingSystem publicclassWriteTest publicstaticvoidMain inti 32767 doubled 456 56789 由控制台 按照十进制输出整数及浮点数Console Write i 0 x 0 8 X td 1 10 F3 i d 由控制台 按照十六进制输出整数Console Write i 0 x 0 8 X td 1 10 F3 i d 输出结果 i 0 x7FFFd 456 568i 0 x7FFFd 456 568 控制台输入和输出 Console WriteLine 方法Console WriteLine方法用来向控制台输出一行字符 即WriteLine方法在输出信息之后 在信息的尾部自动添加 r n 字符 表示回车换行 publicstaticvoidWriteLine XXXvalue publicstaticvoidWriteLine stringformat objecto1 注意 格式化format同WriteLine中的格式化参数完全一样 控制台输入和输出 WriteLine csusingSystem publicclassWriteTest publicstaticvoidMain inti 32767 doubled 456 56789 格式化输出Console WriteLine i 0 x 0 8 X td 1 10 F3 i d Console WriteLine i 0 x 0 8 X td 1 10 F3 i d Console WriteLine i 0 x 0 8 D td 1 10 C3 i d 输出结果 i 0 x7FFFd 456 568i 0 x7FFFd 456 568i 32767d 456 568 第3章C 面向对象设计 结构程序设计的不足 数据与方法分离 voidSpeedUp int doublespeed 0 结构程序设计的不足 代码不能重用 voidmain intdoorN car1 2 intcolor car1 0 intspeed car1 100 printf d d d n doorN car1 color car1 speed car1 intdoorN car2 4 intcolor car2 1 intspeed car2 80 printf d d d n doorN car2 color car2 speed car2 C 的面向对象特性 所有东西都是对象 变量和方法的集合 初级特性 OO最基本的概念 即类和对象 中级特性 OO最核心的概念 即封装 继承和多态 高级特性 由初级特性和中级特性引出的一些问题 如构造函数的使用 覆盖的规则 静态变量和函数等 初级特性 面向对象技术最基本的概念是类和对象 类是一个样板 以操作 表示和算法的形式完整地定义了一组对象的行为 它通常也是面向对象语言中的模块化 封装和数据抽象的基础 对象是类的一个实例 是一个软件单元 它由一组结构化的数据和在其上的一组操作构成 抽象数据类型 类实际上为实际的物体在计算机中定义了一种抽象数据类型 抽象数据类型是仅由数据类型和可能在这个数据类型上进行的操作定义的 使用者只能通过操作方法来访问其属性 不用知道这个数据类型内部各种操作是如何实现的 classCar publicintdoorN publicintcolor publicintspeed publicvoidSpeedUp speed 10 classMyApp staticvoidMain Carcar1 car1 doorN 2 car1 color 0 car1 speed 100 Carcar2 car2 doorN 4 car2 color 1 car2 speed 80 publicdoublespeed 面向对象程序设计 封装 代码重用 3 2类与对象 类 C 所有的代码都是在某一个类中 因此不可能在类之外的全局区域有变量和方法 对象 C 中的对象相当于一块内存区域 保存对象特有的类中所定义的数据 引用 C 中对于对象的操作全部通过引用进行 3 2 1类的定义类使用class关键字声明 采用的形式为 类修饰符 class类名称 基类以及实现的接口列表 类体 类 对象和引用的声明 声明一个类 访问修饰字class类名 变量声明 方法声明 classStudent longid 学号chargender 性别intclassID 班级号 注意不能用class作属性名voidChangeClass intaClassID 更改班级 声明一个对象引用 类名引用名Studentstudent 创建一个对象 new类构造函数student newStudent 如果缺少这一步编译器会报错使用对象 引用名 变量名 方法名 参数 student id 2194 引用与对象举例 引用类似于C 中的对象指针 但又有区别 在C 中 引用 是指向一个对象在内存中的位置 在本质上是一种带有很强的完整性和安全性的限制的指针 当声明某个类 接口或数组类型的一个变量时 变量的值总是某个对象的引用或者是null引用 指针就是简单的地址而已 而引用除了表示地址而外 还是被引用的数据对象的缩影 可以提供其他信息 指针可以有 运算 引用不可以运算 3 1 2类的成员1 类的成员分类常量 表示与该类相关联的常量值 字段 即该类的变量 类型 用于表示一些类型 它们是该类的局部类型 方法 用于实现可由该类执行的计算和操作 属性 用于定义一些命名特性 通过它来读取和写入相关的特性 事件 用于定义可由该类生成的通知 索引器 使该类的实例可按与数组相同的 语法 方式进行索引 运算符 用于定义表达式运算符 通过它对该类的实例进行运算 实例构造函数 用于规定在初始化该类的实例时需要做些什么 析构函数 用于规定在永久地放弃该类的一个实例之前需要做些什么 静态构造函数 用于规定在初始化该类自身时需要做些什么 publicclassFurniture constdoublesalesTax 065 privatedoublepurchPrice privatestringvendor inventoryID publicFurniture stringvendor stringinventID doublepurchPrice this vendor vendor this inventoryID inventID this purchPrice purchPrice publicstringMyVendor get returnvendor publicdoubleCalcSalesTax doublesalePrice returnsalePrice salesTax 字段 构造函数 成员属性 方法 2 类成员的可访问性 类或结构的默认访问类型是internal 类中所有的成员 默认均为private classFurniture constdoublesalesTax 065 privatedoublepurchPrice privatestringvendor inventoryID publicFurniture stringvendor stringinventID doublepurchPrice this vendor vendor this inventoryID inventID this purchPrice purchPrice publicstringMyVendor get returnvendor publicdoubleCalcSalesTax doublesalePrice returnsalePrice salesTax classMyApp staticvoidMain Furnituref newFurniture aaa 001 1 2 Console WriteLine f salesTax Console WriteLine Furniture salesTax f purchPrice 10 stringstr f MyVendor 错误 3 1 3构造函数 构造函数是一种用于对象初始化的特殊方法 有以下特点 构造函数只能在对象创建时调用 即和new运算符一起被调用 构造函数和类具有相同的名字 构造函数可以有0个 1个或多个参数 构造函数没有返回值 每个类至少有一个构造函数 一个类可以有多个构造函数 如果没有为类定义构造函数 系统会自动为其定义一个缺省的构造函数 缺省构造函数不带参数 作用是将实例变量都清零 一旦为类定义了构造函数 则系统不会再为其定义缺省构造函数 C 中构造函数有三种 实例构造 私有构造和静态构造 创建对象与构造函数类声明后 可以创建类的实例 即对象 创建类的实例需要使用new关键字 类的实例相当于一个变量 创建类实例的格式如下 类名对象名 new构造函数 参数类表 例如 PointmyPoint newPoint 类的构造函数可通过初始值设定项来调用基类的构造函数 例如 publicStudent stringno stringname charsex intage base name sex age 类的构造函数也可通过关键字this调用同一个类的另一个构造函数 例如 publicPoint this 0 20 构造函数举例 classStudent longid chargender intclassID publicStudent this 0 F 0 publicStudent longaID charaGender intaClassID id aID gender aGender classID aClassID 私有构造函数 在某些特殊的情况下 使用私有构造函数能够达到意想不到的效果 比如 想建立这样一个类 不允许被其他类实例化 但提供对外的静态接口成员 在 NET框架类库中就存在这样的类 如System Math类就不能够实例化 它的所有成员都是静态的 用关键字privat

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论