C#基础教程Word文档下载推荐.docx
《C#基础教程Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《C#基础教程Word文档下载推荐.docx(14页珍藏版)》请在冰豆网上搜索。
环境,C#语言的CLR和JAVA语言的虚拟机类似。
这种执行方法使运行速度变慢,但带来其它一些好处,主
要有:
l通用语言规范(CommonLanguageSpecification,CLS):
.NET系统包括如下语言:
C#、C++、VB、J#
,他们都遵守通用语言规范。
任何遵守通用语言规范的语言源程序,都可编译为相同的中间语言代码,
由CLR负责执行。
只要为其它操作系统编制相应的CLR,中间语言代码也可在其它系统中运行。
l自动内存管理:
CLR内建垃圾收集器,当变量实例的生命周期结束时,垃圾收集器负责收回不被使用
的实例占用的内存空间。
不必象C和C++语言,用语句在堆中建立的实例,必须用语句释放实例占用的内
存空间。
也就是说,CLR具有自动内存管理功能。
l交叉语言处理:
由于任何遵守通用语言规范的语言源程序,都可编译为相同的中间语言代码,不同语
言设计的组件,可以互相通用,可以从其它语言定义的类派生出本语言的新类。
由于中间语言代码由CLR
负责执行,因此异常处理方法是一致的,这在调试一种语言调用另一种语言的子程序时,显得特别方便
l增加安全:
C#语言不支持指针,一切对内存的访问都必须通过对象的引用变量来实现,只允许访问内
存中允许访问的部分,这就防止病毒程序使用非法指针访问私有成员。
也避免指针的误操作产生的错误
CLR执行中间语言代码前,要对中间语言代码的安全性,完整性进行验证,防止病毒对中间语言代码的
修改。
l版本支持:
系统中的组件或动态联接库可能要升级,由于这些组件或动态联接库都要在注册表中注册
,由此可能带来一系列问题,例如,安装新程序时自动安装新组件替换旧组件,有可能使某些必须使用
旧组件才可以运行的程序,使用新组件运行不了。
在.NET中这些组件或动态联接库不必在注册表中注册
,每个程序都可以使用自带的组件或动态联接库,只要把这些组件或动态联接库放到运行程序所在文件
夹的子文件夹bin中,运行程序就自动使用在bin文件夹中的组件或动态联接库。
由于不需要在注册表中
注册,软件的安装也变得容易了,一般将运行程序及库文件拷贝到指定文件夹中就可以了。
l完全面向对象:
不象C++语言,即支持面向过程程序设计,又支持面向对象程序设计,C#语言是完全
面向对象的,在C#中不再存在全局函数、全局变量,所有的函数、变量和常量都必须定义在类中,避免
了命名冲突。
C#语言不支持多重继承。
1.2编写控制台应用程序
使用SDK命令行工具编写控制台程序
第一个程序总是非常简单的,程序首先让用户通过键盘输入自己的名字,然后程序在屏幕上打印一条欢
迎信息。
程序的代码是这样的:
usingSystem;
//导入命名空间。
//为C#语言新增解释方法,解释到本行结束
classWelcome//类定义,类的概念见下一节
{/*解释开始,和C语言解释用法相同
解释结束*/
staticvoidMain()//主程序,程序入口函数,必须在一个类中定义
{Console.WriteLine("
请键入你的姓名:
"
);
//控制台输出字符串
Console.ReadLine();
//从键盘读入数据,输入回车结束
Console.WriteLine("
欢迎!
}
可以用任意一种文本编辑软件完成上述代码的编写,然后把文件存盘,假设文件名叫做welcome.cs,C#
源文件是以cs作为文件的扩展名。
和C语言相同,C#语言是区分大小写的。
高级语言总是依赖于许多在程
序外部预定义的变量和函数。
在C或C++中这些定义一般放到头文件中,用#include语句来导入这个头文
件。
而在C#语言中使用using语句导入名字空间,usingSystem语句意义是导入System名字空间,C#中的
using语句的用途与C++中#include语句的用途基本类似,用于导入预定义的变量和函数,这样在自己的
程序中就可以自由地使用这些变量和函数。
如果没有导入名字空间的话我们该怎么办呢?
程序还能保持
正确吗?
答案是肯定的,那样的话我们就必须把代码改写成下面的样子:
classWelcome
{staticvoidMain()
{System.Console.WriteLine("
System.Console.ReadLine();
System.Console.WriteLine("
也就是在每个Console前加上一个前缀System.,这个小原点表示Console是作为System的成员而存在的。
C#中抛弃了C和C++中繁杂且极易出错的操作符象:
:
和->
等,C#中的复合名字一律通过.来连接。
System是
.Net平台框架提供的最基本的名字空间之一,有关名字空间的详细使用方法将在以后详细介绍,这里只
要学会怎样导入名字空间就足够了。
程序的第二行classWelcome声明了一个类,类的名字叫做Welcome。
C#程序中每个变量或函数都必须属
于一个类,包括主函数Main(),不能象C或C++那样建立全局变量。
C#语言程序总是从Main()方法开始执
行,一个程序中不允许出现两个或两个以上的Main()方法。
请牢记C#中Main()方法必须被包含在一个类
中,Main第一个字母必须大写,必须是一个静态方法,也就是Main()方法必须使用static修饰。
static
voidMain()是类Welcome中定义的主函数。
静态方法意义见以后章节。
程序所完成的输入输出功能是通过Console类来完成的,Console是在名字空间System中已经定义好的一
个类。
Console类有两个最基本的方法WriteLine和ReadLine。
ReadLine表示从输入设备输入数据,
WriteLine则用于在输出设备上输出数据。
如果在电脑上安装了VisualStudio.Net,则可以在集成开发环境中直接选择快捷键或菜单命令编译并执
行源文件。
如果您不具备这个条件,那么至少需要安装Microsoft.NetFrameworkSDK,这样才能够运行
C#语言程序。
Microsoft.NetFrameworkSDK中内置了C#的编译器csc.exe,下面让我们使用这个微软提
供的命令行编译器对程序welcome.cs进行编译。
假设已经将welcome.cs文件保存在d:
\Charp目录下,启
动命令行提示符,在屏幕上输入一行命令:
d:
回车,cdCharp回车,键入命令:
C:
\WINNT\Microsoft.NET\Framework\v1.0.3705\cscwelcome.cs
如果一切正常welcome.cs文件将被编译,编译后生成可执行文件Welcome.exe。
可以在命令提示符窗口运
行可执行文件Welcome.exe,屏幕上出现一行字符提示您输入姓名:
输入任意字符并按
下回车键,屏幕将打印出欢迎信息:
注意,和我们使用过的绝大多数编译器不同,在C#中编译器只执行编译这个过程,而在C和C++中要经过
编译和链接两个阶段。
换而言之C#源文件并不被编译为目标文件.obj,而是直接生成可执行文件.exe或
动态链接库.dll,C#编译器中不需要包含链接器。
使用VisualStudio.Net建立控制台程序
(1)运行VisualStudio.Net程序,出现如图1.2.2A界面。
(2)单击新建项目按钮,出现如图1.2.2B对话框。
在项目类型(P)编辑框中选择VisualC#项目,在模
板(T)编辑框中选择控制台应用程序,在名称(N)编辑框中键入e1,在位置(L)编辑框中键入D:
\csarp,必
须预先创建文件夹D:
\csarp。
也可以单击浏览按钮,在打开文件对话框中选择文件夹。
单击确定按钮,
创建项目。
出现如图1.2.2C界面。
编写一个应用程序,可能包含多个文件,才能生成可执行文件,所有
这些文件的集合叫做一个项目。
(3)修改class1.cs文件如下,有阴影部分是新增加的语句,其余是集成环境自动生成的。
namespacee1
{
///<
summary>
///Class1的摘要说明。
/summary>
classClass1
{
///应用程序的主入口点。
[STAThread]
staticvoidMain(string[]args)
//
//TODO:
在此处添加代码以启动应用程序
Console.WriteLine("
Console.ReadLine();
}
(4)按CTRL+F5键,运行程序,如右图,和1.2.1节运行效果相同。
屏幕上出现一行字符,提示您输入姓
名:
输入任意字符并按下回车键,屏幕将打印出欢迎信息:
输入回车退出程序
图1.2.2A
图1.2.2B
1.3类的基本概念
C#语言是一种现代、面向对象的语言。
面向对象程序设计方法提出了一个全新的概念:
类,它的主要思
想是将数据(数据成员)及处理这些数据的相应方法(函数成员)封装到类中,类的实例则称为对象。
这就是我们常说的封装性。
类的基本概念
类可以认为是对结构的扩充,它和C中的结构最大的不同是:
类中不但可以包括数据,还包括处理这些数
据的函数。
类是对数据和处理数据的方法(函数)的封装。
类是对某一类具有相同特性和行为的事物的
描述。
例如,定义一个描述个人情况的类Person如下:
classPerson//类的定义,class是保留字,表示定义一个类,Person是类名
{privatestringname="
张三"
;
//类的数据成员声明
privateintage=12;
//private表示私有数据成员
publicvoidDisplay()//类的方法(函数)声明,显示姓名和年龄
{C