1、目 录第一章:C#语言基础1.1C#语言特点111.2编写控制台应用程序121.2.1使用SDK命令行工具编写控制台程序121.2.1使用Visual Studio.Net建立控制台程序131.3类的基本概念161.3.1类的基本概念161.3.2类成员的存取控制161.3.3类的对象171.3.4类的构造函数和析构函数171.3.5类的构造函数的重载171.3.6使用Person类的完整的例子181.4C#的数据类型191.4.1值类型和引用类型区别191.4.2值类型变量分类201.4.3结构类型201.4.4简单类型211.4.5枚举类型211.4.6值类型的初值和默认构造函数221.4
2、.7引用类型分类221.4.8对象类(object类)221.4.9数组类231.4.10字符串类(string类)241.4.11类型转换251.5运算符261.5.1运算符分类271.5.2测试运算符is271.5.3typeof运算符281.5.4溢出检查操作符checked和unchecked281.5.5new运算符291.5.6运算符的优先级291.6程序控制语句291.6.1和C语言的不同点291.6.2foreach语句301.6.3异常语句311.7类的继承321.7.1派生类的声明格式321.7.2 base 关键字331.7.3 覆盖基类成员331.7.4 C#语言类继承
3、特点331.8类的成员341.8.1类的成员类型341.8.2类成员访问修饰符341.9类的字段和属性341.9.1静态字段、实例字段、常量和只读字段351.9.2属性351.10类的方法361.10.1方法的声明371.10.2方法参数的种类371.10.3静态方法和实例方法391.10.4方法的重载401.10.5操作符重载411.10.6this关键字411.11类的多态性421.12抽象类和抽象方法441.13密封类和密封方法451.14接口451.14.1接口声明461.14.2接口的继承461.14.3类对接口的实现471.15代表481.16事件491.16.1事件驱动491.1
4、6.2事件的声明491.16.3事件的预订和撤消501.17索引指示器501.18名字空间511.18.1名字空间的声明511.18.2名字空间使用521.19非安全代码52习题53第一章Windows编程的基础知识542.1窗口542.2Windows的消息系统542.2.1消息驱动(事件驱动)542.2.2事件队列542.2.3注视窗口542.3Windows编程接口和类库552.3.1Windows编程接口(API)552.3.2MFC类库552.3.3组件库552.3.4.NET框架类库552.4Windows应用程序的基本结构562.4.1最简单的Windows应用程序562.4.2
5、用Visual Studio.Net建立Windows应用程序框架572.4.3方案(Solution)和项目(Project)62习题63第二章常用控件和类的使用643.1控件通用属性643.2Form类643.3标签(Label)控件653.4按钮(Button)控件663.5事件处理函数的参数663.6文本框(TextBox)控件673.7Convert类683.8单选按钮(RadioButton)和GroupBox控件683.9Font类693.10多选框(CheckBox)控件693.11列表选择控件(ListBox)713.12下拉列表组合框(ComboBox)控件723.13To
6、olTip控件723.14超级链接(LinkLable)控件733.15定时(Timer)控件733.16DateTime类743.17菜单753.18工具条763.19状态栏(StatusBar)控件783.20鼠标事件793.21快捷菜单(ContextMenu)803.22综合例子:计算器81习题:83第三章文本编辑器的实现854.1用RichTextBox控件实现文本编辑器854.2实现文本编辑器的剪贴板功能864.3实现文本编辑器的存取文件功能864.3.1OpenFileDialog和SaveFileDialog控件864.3.2存取文件功能的实现884.4修改字体属性894.4.
7、1FontDialog控件属性和方法894.4.2修改字体属性的实现方法894.5实现About对话框904.6实现文本编辑器查找替换功能914.6.1模式对话框和非模式对话框914.6.2写字板查找替换功能的实现924.7提示用户保存修改的文件944.7.1对话框MessageBox944.7.2提示用户保存修改的文件的实现944.8打印和打印预览964.8.1PrintDocument类964.8.2打印设置对话框控件PageSetupDialog984.8.3打印预览994.8.4用打印对话框PrintDialog实现打印1004.9编写多文档界面应用程序1004.9.1建立类似Micr
8、osoft Word的编辑器1014.9.2主窗口和子窗口的菜单的融合1024.9.3建立类似Visualstudio.Net的编辑器104习题106第四章图形图像编程1085.1图形设备环境接口(GDI)1085.2Graphics类1085.2.1使用Graphics类绘图的基本步骤1095.2.2窗体的Paint事件1095.3GDI+中三种坐标系统:1095.4GDI+中常用的结构1105.4.1结构Point和PointF1105.4.2结构Size和SizeF1105.4.3结构Rectangle和RectangleF1105.4.4结构Color1105.5画笔1115.6创建画
9、刷1125.6.1单色画刷SolidBrush1125.6.2阴影画刷HatchBrush1125.6.3纹理(图像)画刷TextureBrush1135.6.4颜色渐变画刷LinearGradientBrush1145.6.5画刷PathGradientBrush1155.7基本图形的绘制和填充1165.7.1绘制线段1165.7.2ArrayList类1185.7.3画椭圆(圆)及键盘消息的使用1195.7.4画矩形1205.7.5绘制圆弧1215.7.6DrawPie方法1215.7.7Bezier曲线1215.7.8DrawPolygon方法1225.7.9DrawClosedCurv
10、e方法1225.7.10DrawCurve方法1235.7.11DrawPath方法和GraphicsPath类1235.7.12DrawString方法1245.7.13DrawImage和DrawIcon方法1245.7.14FillEllipse方法1255.7.15FillRectangle方法1265.7.16FillPie方法1265.7.17FillRegion方法和Region类1265.8Matrix类和图形的平移、变形、旋转1285.8.1Matrix类1285.8.2图形的平移、变形、旋转1285.8.3仿射矩阵1295.9图形文件格式1305.10图形框PictureB
11、ox控件1315.11Bitmap类1325.11.1Bitmap类支持的图像类型1325.11.2Bitmap类的方法1325.11.3画点1325.11.4在PictureBox中画任意曲线1335.11.5存取位图文件1345.11.6用拖动鼠标方法画椭圆或圆1345.12图像剪贴板功能1365.12.1剪贴区域选定1365.12.2剪贴板复制功能的实现1365.12.3剪贴板剪贴功能的实现1375.12.4剪贴板粘贴功能的实现1375.13图像的处理1395.13.1图像的分辨力1395.13.2彩色图像变换为灰度图像1405.13.3灰度图像处理1405.13.4动画141习题142
12、第五章文件和流1436.1用流读写文件1436.1.1用FileStream类读写字节1436.1.2用BinaryReader和BinaryWriter类读写基本数据类型1436.1.3用StreamReader和StreamWriter类读写字符串1446.2File类和FileInfo类1446.2.1File类常用的方法1446.2.2文件打开方法:File.Open1456.2.3文件创建方法:File.Create1456.2.4文件删除方法:File.Delete1456.2.5文件复制方法:File.Copy1456.2.6文件移动方法:File.Move1466.2.7设置文
13、件属性方法:File.SetAttributes1466.2.8判断文件是否存在的方法:File.Exist1466.2.9得到文件的属性1466.3Directory类和DirectoryInfo类1466.3.1Directory类常用的方法如下:1476.3.2目录创建方法:Directory.CreateDirectory1476.3.3目录属性设置方法:DirectoryInfo.Atttributes1476.3.4目录删除方法:Directory.Delete1476.3.5目录移动方法:Directory.Move1486.3.6获取当前目录下所有子目录:Directory.G
14、etDirectories1486.3.7获取当前目录下的所有文件方法:Directory.GetFiles1486.3.8判断目录是否存在方法:Directory.Exist1486.4例子:查找文件1496.4.1Panel和ListView控件1496.4.2在指定文件夹中查找文件1496.5例子:拆分和合并文件150习题:151第六章多线程程序设计1527.1线程类(Thread)的属性和方法1527.2线程的创建1537.3建立线程类1547.3.1进度条(ProgressBar)控件1547.3.2用线程控制进度条1547.4线程的优先级1557.5多个线程互斥1567.5.1多个
15、线程同时修改共享数据可能发生错误1567.5.2用LOCK语句实现互斥1577.5.3用Mutex类实现互斥1577.5.4用Monitor类实现互斥1577.6Monitor类1577.7线程的同步:生产者和消费者关系1577.7.1生产者线程和消费者线程不同步可能发生错误1577.7.2生产者线程和消费者线程同步的实现158习题:159第七章ADO.NET与数据操作1608.1数据库基本概念1608.2设计连接和不连接数据库应用程序的基本步骤:1608.3用ACCESS创建数据库1618.4结构化查询语言SQL1638.4.1Select语句1638.4.2Insert语句1638.4.3
16、Delete语句1638.4.4Update语句1648.5用Connection对象连接数据库。1648.6Command对象1648.7DataAdapter对象1658.8DataSet对象1668.8.1使用DataSet的优点1668.8.2数据集DataSet概念1668.8.3使用DataSet对象1678.8.4为DataSet对象中的表指定主键、建立关系1678.9用DataGraid控件显示数据和数据绑定1688.10不连接数据库应用程序的完整的例子1688.11修改数据并保存修改的数据到源数据库1698.12其它数据绑定控件1708.13建立主从关系表171第八章ASP.
17、Net编程基础知识1739.1网络基础1739.2.1局域网、广域网和INTERNET1739.2.2网络传输协议1739.2.3IP地址1739.2.4域名1749.2.5URL1749.2.6端口号1749.2.7HTML,HTTP和网页1759.2.8Web服务器和浏览器工作方式1759.2.9宿主目录、默认主页及网站1759.2.10静态网页1769.2.11客户端动态网页1769.2.12服务器端动态网页1769.2.13修改宿主目录及建立虚拟目录1769.2HTML标记语言1779.2.1HTML标记1789.2.2HTML文件结构1789.2.3语言字符集的信息1799.2.4背
18、景色彩和文字色彩1799.2.5页面空白1809.2.6显示一幅图1809.2.7超级链接1809.2.8超级链接在新窗口打开另一网页1809.2.9标尺线1819.2.10网页中标题的字体1829.2.11网页中正文字体1829.2.12斜体、粗体字符及为字体增加下划线,删除线1839.2.13字体标记的组合使用1839.2.14字体的颜色1849.2.15客户端字体1849.2.16网页中控件的概念1849.2.17窗体控件和其它控件的使用1859.2.18例子:文字输入和密码输入1859.2.19用FontPage做网页的例子,使用复选框和单选按钮1869.3ASP.NET技术基础187
19、9.3.1HTML服务器端控件1879.3.2Web服务器端控件1889.3.3Web Form的事件处理1889.3.4记事本编写ASP.NET动态网页1889.3.5用Visual Studio.NET实现ASP.NET动态网页1899.3.6Code Behind技术1909.3.7ASP.NET和HTML兼容1929.3.8网页中使用C#语句192第九章Web服务器端控件19410.1常用的ASP.NET服务器端控件19410.1.1Label控件19410.1.2TextBox控件19410.1.3Button、LinkButton和ImageButton控件19510.1.4Che
20、ckBox和CheckBoxList控件19510.1.5RadioButton和RadioButtonList控件19510.1.6Image控件19610.1.7HyperLink控件19710.1.8Table、TableCell和TableRow控件19710.1.9DrowDownList控件19710.2ASP.Net控件数据绑定19810.2.1数据绑定基础19810.2.2基于变量的数据绑定19910.2.3基于集合的绑定20010.2.4基于表达式绑定20410.2.5基于DataBinder.Eval方法的数据绑定20510.2.6列表绑定控件20610.3数据验证控件21
21、510.3.1数据验证概述21510.3.2常用的验证控件21610.3.3验证控件常用的属性21610.3.4RequiredFieldValidator21610.3.5自定义数据验证控件CustomValidator控件21710.3.6ValidationSummary控件21910.3.7CompareValidator控件22010.3.8RegularExpressionValidator 控件22210.4DataGraid控件22510.4.1DataGrid控件概述22510.4.2DataGrid控件绑定数据库表22510.4.3DataGrid控件对数据库记录分页显示2
22、2610.4.4DataGrid控件对记录排序22810.4.5用BoundColumn列将标题改为中文23110.4.6增加按钮列23210.4.7增加HyperLinkColumn列23410.4.8增加EditCommandColumn列23710.4.9控件TemplateColumn的用法23710.5AdRotator控件24110.6Calender控件24210.7Visual Studio.Net实现留言板245第十章ASP.NET内建对象24811.1Request对象24811.1.1用Request对象获取另一个网页传递的数据24811.1.2用Request对象获取客
23、户端浏览器的信息24911.1.3用Request对象获取服务器信息25011.2Response对象25011.2.1用Response对象发送信息在浏览器中显示25011.2.2用Response对象重定向浏览器25111.3Cookie对象25211.3.1用Cookie对象记录访问的次数25211.3.2网上商店购物筐实现25311.4Application对象25611.4.1Application对象属性25611.4.2方法25611.4.3事件25711.4.4例子:显示访问网站总人数25711.5Session对象25911.5.1属性25911.5.2方法26011.5.3
24、事件26011.5.4用Session对象实现网上商店购物筐26111.6Server 对象26311.6.1属性MachineName和ScriptTimeout26311.6.2HtmlEncode方法26411.6.3URLEncode方法26411.6.4MapPath方法264习题264第十一章可扩展标记语言26512.1HTML及其缺点26512.2SGML(标准通用置标语言)26512.3XML(可扩展置标语言)26512.4XML的文档格式26612.5用XSL文件显示XML文档26712.6.NET对XML的支持27112.7ADO.NET和XML27412.8使用Visua
25、l Studio.Net建立和显示XML文档277第十二章Web服务27913.1Web服务的概念和用途27913.2建立Web服务28013.2.1用记事本建立Web服务28013.2.2用Visual Studio.Net建立Web服务28113.2.3服务描述语言(WSDL)28313.3基于.Net的Web服务客户端程序28313.3.1Web服务客户端程序代理类28413.3.2HTTP-GET、HTTP-POST和SOAP协议28413.3.3使用代理类的Web服务客户端程序28413.3.4Visual Studio.Net建立Web服务客户端程序28513.4建立Web服务客户
26、端程序一般方法28613.5发布和发现Web服务28713.5.1Web服务目录28713.5.2Web服务发现287C#语言基础本章介绍C#语言的基础知识,希望具有C语言的读者能够基本掌握C#语言,并以此为基础,能够进一步学习用C#语言编写window应用程序和Web应用程序。当然仅靠一章的内容就完全掌握C#语言是不可能的,如需进一步学习C#语言,还需要认真阅读有关C#语言的专著。1.1 C#语言特点Microsoft.NET(以下简称.NET)框架是微软提出的新一代Web软件开发模型,C#语言是.NET框架中新一代的开发工具。C#语言是一种现代、面向对象的语言,它简化了C+语言在类、命名空
27、间、方法重载和异常处理等方面的操作,它摒弃了C+的复杂性,更易使用,更少出错。它使用组件编程,和VB一样容易使用。C#语法和C+和JAVA语法非常相似,如果读者用过C+和JAVA,学习C#语言应是比较轻松的。用C#语言编写的源程序,必须用C#语言编译器将C#源程序编译为中间语言(MicroSoft Intermediate Language,MSIL)代码,形成扩展名为exe或dll文件。中间语言代码不是CPU可执行的机器码,在程序运行时,必须由通用语言运行环境(Common Language Runtime,CLR)中的既时编译器(JUST IN Time,JIT)将中间语言代码翻译为CPU
28、可执行的机器码,由CPU执行。CLR为C#语言中间语言代码运行提供了一种运行时环境,C#语言的CLR和JAVA语言的虚拟机类似。这种执行方法使运行速度变慢,但带来其它一些好处,主要有:l 通用语言规范(Common Language Specification,CLS):.NET系统包括如下语言:C#、C+、VB、J#,他们都遵守通用语言规范。任何遵守通用语言规范的语言源程序,都可编译为相同的中间语言代码,由CLR负责执行。只要为其它操作系统编制相应的CLR,中间语言代码也可在其它系统中运行。l 自动内存管理:CLR内建垃圾收集器,当变量实例的生命周期结束时,垃圾收集器负责收回不被使用的实例占
29、用的内存空间。不必象C和C+语言,用语句在堆中建立的实例,必须用语句释放实例占用的内存空间。也就是说,CLR具有自动内存管理功能。l 交叉语言处理:由于任何遵守通用语言规范的语言源程序,都可编译为相同的中间语言代码,不同语言设计的组件,可以互相通用,可以从其它语言定义的类派生出本语言的新类。由于中间语言代码由CLR负责执行,因此异常处理方法是一致的,这在调试一种语言调用另一种语言的子程序时,显得特别方便。l 增加安全:C#语言不支持指针,一切对内存的访问都必须通过对象的引用变量来实现,只允许访问内存中允许访问的部分,这就防止病毒程序使用非法指针访问私有成员。也避免指针的误操作产生的错误。CLR
30、执行中间语言代码前,要对中间语言代码的安全性,完整性进行验证,防止病毒对中间语言代码的修改。l 版本支持:系统中的组件或动态联接库可能要升级,由于这些组件或动态联接库都要在注册表中注册,由此可能带来一系列问题,例如,安装新程序时自动安装新组件替换旧组件,有可能使某些必须使用旧组件才可以运行的程序,使用新组件运行不了。在.NET中这些组件或动态联接库不必在注册表中注册,每个程序都可以使用自带的组件或动态联接库,只要把这些组件或动态联接库放到运行程序所在文件夹的子文件夹bin中,运行程序就自动使用在bin文件夹中的组件或动态联接库。由于不需要在注册表中注册,软件的安装也变得容易了,一般将运行程序及
31、库文件拷贝到指定文件夹中就可以了。l 完全面向对象:不象C+语言,即支持面向过程程序设计,又支持面向对象程序设计,C#语言是完全面向对象的,在C#中不再存在全局函数、全区变量,所有的函数、变量和常量都必须定义在类中,避免了命名冲突。C#语言不支持多重继承。1.2 编写控制台应用程序1.2.1 使用SDK命令行工具编写控制台程序第一个程序总是非常简单的,程序首先让用户通过键盘输入自己的名字,然后程序在屏幕上打印一条欢迎信息。程序的代码是这样的:using System;/导入命名空间。/为C#语言新增解释方法,解释到本行结束class Welcome/类定义,类的概念见下一节 /*解释开始,和C
32、语言解释用法相同解释结束*/static void Main()/主程序,程序入口函数,必须在一个类中定义 Console.WriteLine(请键入你的姓名:);/控制台输出字符串Console.ReadLine();/从键盘读入数据,输入回车结束Console.WriteLine(欢迎!);可以用任意一种文本编辑软件完成上述代码的编写,然后把文件存盘,假设文件名叫做welcome.cs,C#源文件是以cs作为文件的扩展名。和C语言相同,C#语言是区分大小写的。高级语言总是依赖于许多在程序外部预定义的变量和函数。在C或C+中这些定义一般放到头文件中,用#include语句来导入这个头文件。而
33、在C#语言中使用using语句导入名字空间,using System语句意义是导入System名字空间,C#中的using语句的用途与C+中#include语句的用途基本类似,用于导入预定义的变量和函数,这样在自己的程序中就可以自由地使用这些变量和函数。如果没有导入名字空间的话我们该怎么办呢?程序还能保持正确吗?答案是肯定的,那样的话我们就必须把代码改写成下面的样子:class Welcome static void Main() System.Console.WriteLine(请键入你的姓名:);System.Console.ReadLine();System.Console.WriteL
34、ine(欢迎!);也就是在每个Console前加上一个前缀System.,这个小原点表示Console是作为System的成员而存在的。C#中抛弃了C和C+中繁杂且极易出错的操作符象:和-等,C#中的复合名字一律通过.来连接。System是.Net平台框架提供的最基本的名字空间之一,有关名字空间的详细使用方法将在以后详细介绍,这里只要学会怎样导入名字空间就足够了。程序的第二行class Welcome声明了一个类,类的名字叫做Welcome。C#程序中每个变量或函数都必须属于一个类,包括主函数Main(),不能象C或C+那样建立全局变量。C#语言程序总是从Main()方法开始执行,一个程序中不
35、允许出现两个或两个以上的Main()方法。请牢记C#中Main()方法必须被包含在一个类中,Main第一个字母必须大写,必须是一个静态方法,也就是Main()方法必须使用static修饰。static void Main()是类Welcome中定义的主函数。静态方法意义见以后章节。程序所完成的输入输出功能是通过Console类来完成的,Console是在名字空间System中已经定义好的一个类。Console类有两个最基本的方法WriteLine和ReadLine。ReadLine表示从输入设备输入数据,WriteLine则用于在输出设备上输出数据。如果在电脑上安装了Visual Studio
36、.Net,则可以在集成开发环境中直接选择快捷键或菜单命令编译并执行源文件。如果您不具备这个条件,那么至少需要安装Microsoft.Net Framework SDK,这样才能够运行C#语言程序。Microsoft.Net Framework SDK中内置了C#的编译器csc.exe,下面让我们使用这个微软提供的命令行编译器对程序welcome.cs进行编译。假设已经将welcome.cs文件保存在d:Charp目录下,启动命令行提示符,在屏幕上输入一行命令:d:回车,cd Charp回车,键入命令:C:WINNTMicrosoft.NETFrameworkv1.0.3705csc welco
37、me.cs如果一切正常welcome.cs文件将被编译,编译后生成可执行文件Welcome.exe。可以在命令提示符窗口运行可执行文件Welcome.exe,屏幕上出现一行字符提示您输入姓名:请键入你的姓名:输入任意字符并按下回车键,屏幕将打印出欢迎信息:欢迎!注意,和我们使用过的绝大多数编译器不同,在C#中编译器只执行编译这个过程,而在C和C+中要经过编译和链接两个阶段。换而言之C#源文件并不被编译为目标文件.obj,而是直接生成可执行文件.exe或动态链接库.dll,C#编译器中不需要包含链接器。1.2.1 使用Visual Studio.Net建立控制台程序(1) 运行Visual St
38、udio.Net程序,出现如图1.2.2A界面。(2) 单击新建项目按钮,出现如图1.2.2B对话框。在项目类型(P)编辑框中选择Visual C#项目,在模板(T)编辑框中选择控制台应用程序,在名称(N)编辑框中键入e1,在位置(L)编辑框中键入D:csarp,必须预先创建文件夹D:csarp。也可以单击浏览按钮,在打开文件对话框中选择文件夹。单击确定按钮,创建项目。出现如图1.2.2C界面。编写一个应用程序,可能包含多个文件,才能生成可执行文件,所有这些文件的集合叫做一个项目。(3) 修改class1.cs文件如下,有阴影部分是新增加的语句,其余是集成环境自动生成的。using Syste
39、m;namespace e1/ / Class1 的摘要说明。/ class Class1/ / 应用程序的主入口点。/ STAThreadstatic void Main(string args)/ TODO: 在此处添加代码以启动应用程序/Console.WriteLine(请键入你的姓名:);Console.ReadLine();Console.WriteLine(欢迎!);(4) 按CTRL+F5键,运行程序,如右图,和1.2.1节运行效果相同。屏幕上出现一行字符,提示您输入姓名:请键入你的姓名:输入任意字符并按下回车键,屏幕将打印出欢迎信息:欢迎!输入回车退出程序。图1.2.2A图1
40、.2.2B图1.2.2C1.3 类的基本概念C#语言是一种现代、面向对象的语言。面向对象程序设计方法提出了一个全新的概念:类,它的主要思想是将数据(数据成员)及处理这些数据的相应方法(函数成员)封装到类中,类的实例则称为对象。这就是我们常说的封装性。1.3.1 类的基本概念类可以认为是对结构的扩充,它和C中的结构最大的不同是:类中不但可以包括数据,还包括处理这些数据的函数。类是对数据和处理数据的方法(函数)的封装。类是对某一类具有相同特性和行为的事物的描述。例如,定义一个描述个人情况的类Person如下:using System;class Person/类的定义,class是保留字,表示定义
41、一个类,Person是类名private string name=张三;/类的数据成员声明private int age=12;/private表示私有数据成员public void Display()/类的方法(函数)声明,显示姓名和年龄Console.WriteLine(姓名:0,年龄:1,name,age);public void SetName(string PersonName)/修改姓名的方法(函数)name=PersonName;public void SetAge(int PersonAge)age=PersonAge;Console.WriteLine(姓名:0,年龄:1,n
42、ame,age)的意义是将第二个参数变量name变为字符串填到0位置,将第三个参数变量age变为字符串填到1位置,将第一个参数表示的字符串在显示器上输出。大家注意,这里我们实际定义了一个新的数据类型,为用户自己定义的数据类型,是对个人的特性和行为的描述,他的类型名为Person,和int,char等一样为一种数据类型。用定义新数据类型Person类的方法把数据和处理数据的函数封装起来。类的声明格式如下:属性 类修饰符 class 类名类体其中,关键字class、类名和类体是必须的,其它项是可选项。类修饰符包括new、public、protected、internal、private、abstr
43、act和sealed,这些类修饰符以后介绍。类体用于定义类的成员。1.3.2 类成员的存取控制一般希望类中一些数据不被随意修改,只能按指定方法修改,既隐蔽一些数据。同样一些函数也不希望被其它类程序调用,只能在类内部使用。如何解决这个问题呢?可用访问权限控制字,常用的访问权限控制字如下:private(私有),public(公有)。在数据成员或函数成员前增加访问权限控制字,可以指定该数据成员或函数成员的访问权限。私有数据成员只能被类内部的函数使用和修改,私有函数成员只能被类内部的其它函数调用。类的公有函数成员可以被类的外部程序调用,类的公有数据成员可以被类的外部程序直接使用修改。公有函数实际是一个类和外部通讯的接口,外部函数通过调用公有函数,按照预先设定好的方法修改类的私有成员。对于上述例子,name和age是私有数据成员,只能通过公有函数SetName()和SetAge()修改,既它们只能按指定方法修改。这里再一次解释一下封装
©2010-2024 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100