当前位置:文档之家› C#讲义_中职

C#讲义_中职

第1章 .NET与C#

§1.1 .NET和C#

1.1.1 什么是.NET

1.1.1.1 定义

根据微软的定义:.NET is a "revolutionary new platform, built on open Internet protocols and standards, with tools and services that meld computing and communications in new ways".

即:.NET = 新平台 + 标准协议 + 统一开发工具

.NET技术是微软公司推出的一个全新概念,“它代表了一个集合、一个环境和一个可以作为平台支持下一代Internet的可编程结构。” .NET的最终目标就是让用户在任何地方、任何时间,以及利用任何设备都能访问所需的信息、文件和程序。

1.1.1.2 .NET的构成

.NET开发平台=.NET FrameWork+.NET Development Tools

1、.NET Framework(框架)是整个开发平台的基础,包括Common Language Run(CLR:公共语言运行库)和.NET Class Library(类库)。

(1)公共语言运行库是.NET的基础,用户可以将公共语言运行库看作是一个在执行时管理代码的代理,它提供核心服务(如内存管理、线程管理和远程处理)。

(2).NET类库是一个综合性的面向对象的可重用类集合。

当用C#编写的程序要在其它没有安装.net的机器上运行时,必须安装.NET 框架,否则不能运行,所以.net编写的程序的可移植性稍差。

2、.NET开发工具包括Visual https://www.doczj.com/doc/0a9348417.html,集成开发环境和.NET编程语言。其中,Visual Studio .NET集成开发环境用来开发和测试应用程序。.NET编程语言包括Visual Basic、Visual C++和新的Visual C#等用来创建运行在公共语

言运行库(CLR)上的应用程序。

1.1.2 什么是C#

C#读作C Sharp,是C和C++语言家族中第一种面向组件的编程语言,是一种使用简单、面向对象、类型安全的现代编程语言。作为Microsoft的下一代面向对象的语言,能够让开发人员在.NET平台上快速地建立大量的应用程序。按照Microsoft给出的定义,C#是一种源自于C和C++的,简单的、现代的、面向对象的和类型安全的程序设计语言,它结合了VB的灵活性和C语言的强大的功能,是新一代的编程语言。C#为程序员提供了开发飞速发展的Web应用程序所需要的强大而灵活的功能。与C++相比,C#将更容易被人们理解和接受,未来大量.NET平台的应用将由C#开发,C#将是未来开发企业级分布式应用程序的首选。

§1.2 C#程序结构介绍

1.2.1 创建第一个C#控制台(或称命令行)程序

程序代码如下:

//源文件:welcome.cs

using System;

class Welcome

{

static void Main()

{

Console.WriteLine("Welcome you to enter the C# world!");

}

}

1.2.2 代码及结构分析

1、上面的代码你可以在任意一种字处理软件中进行编写,或在.NET集成开发环境(Integrated Developer Environment,IDE)中直接编写,然后以文件名“Welcome.cs”存盘。典型的C#源文件都是以“.cs”作为文件的扩展名的。

2、名字空间

using System表示导入名字空间,等同于C或C++中的“#include”。“System”就是一个名字空间,是https://www.doczj.com/doc/0a9348417.html,系统提供的类库,“using”指令允许对属于该名字空间成员的类型无限制引用。

3、类和类的方法

在程序第二行,class Welcome声明了一个类,类的名字叫做“Welcome”。这个程序让我们所作的事情都依靠它来完成。在一个C#程序中,至少要包含一个类。

Static void Main()表示类“Welcome”中的一个方法,方法总是为我们完成某项工作的。在C#中,程序的执行总是从“Main()”方法开始,一个程序中不允许出现两个或者两个以上的“Main()”方法。Main()函数在C#里非常特殊,它是编译器规定的所有可执行程序的入口点,Main()函数名的第一个字母要大写,否则将不具有入口点的语义。

就像一个文件夹可以容纳多个文件一样,一个名字空间可以被视为某些类的一个容器。因为.NET有很多类,所以名字空间是必要的。微软已经编写了数以千计的基类,同时任何合理的大型应用程序都可以定义更多的类。通过把类放入名字空间可以把相关的类组织起来,并且可以避免命名冲突。

4、“{”和“}”

与C和C++一样,源代码被包含在一对大括号之中,每一个右括号总是和它前面离它最近的一个左括号相配套。如果左括号和右括号没有全部的配套,那么这就是一个错误的程序。所有语句都以分号“;”结束。

5、程序的输入与输出

程序所完成的输入输出功能都是通过“Console”来完成的,“Console”是在名字空间“System”中已经定义好的一个类,你根本不需要管它是怎么完成工作的,只要直接使用它就可以了。

上面的程序代码中,类“Console”为我们展现了一个最基本的方法:WriteLine,用于在输出设备中输出,还有一个较常用的方法是ReadLine。Console.ReadLine表示接受输入设备输入。

6.添加注释

C#中注释的方式和C、C++没有什么区别,每行中双斜杠“//”后面的内容,以及在分割符“/*”和“*/”之间的内容都将被编译器忽略。其中,“//”表示进行单行注释;“/*”和“*/”表示多行注释。

注:在C#中添加注释与解除注释时,可利用工具栏上的按钮。

7、标识符

C#中的标识符有以下规则:

(1)以字母或下划线开头,后面可以是字母、数字或下划线。

(2)严格区分大小写

(3)关键字也可以作为标识符,但要在关键字前加上@符号。

1.2.3 .NET集成开发环境的使用技巧

1、利用.NET集成开发环境的优越性――智能提示。

2、显示行号:工具/选项→文本编辑器→C#,选中“行号”

3、设置断点:

4、注释/取消注释

5、排版

1.2.4 程序的编译

1.2.4.1 命令行编译

对C#源程序,默认扩展名为.CS,可使用记事本或.NET环境编辑得到。在使用命令行编译时,使用的编译器是:

C:\WINDOWS\https://www.doczj.com/doc/0a9348417.html,\Framework\v2.0.50727\csc.exe

下面以编译file.cs为例:

1、编译file.cs生成file.exe:csc file.cs

2、编译file.cs生成file.dll:csc /target:library file.cs

3、仅编译file.cs,但不生成可执行文件:csc /nooutput file.cs

4、编译file.cs生成my.exe:csc /out:my.exe file.cs

一般经过编译后得到一exe文件,但要注意,此时产生的exe文件是一个由中间语言(IL:Intermediate Language)、元数据(Metadata)和一个额外的被编译器添加的目标平台的标准可执行文件头组成的PE(portable executable,可移植执行体)文件,而不是传统的二进制可执行文件,我们称之为受管代码(Managed Code),这些代码不专用于任何一种操作系统,在执行时,通过即时编译器JIT(Just-In-Time)编译成原始的可执行代码。

1.2.4.2 利用菜单编译并执行程序

利用“调试”菜单。

§1.3 控制台输入输出操作

控制台(Console)的输入输出操作主要是通过命名空间System中的类Console来实现的。输入操作主要有Read方法和ReadLine方法,输出操作主要有Write方法和WriteLine方法。

1.3.1 Console.WriteLine方法

功能:将信息输出到控制台,输出信息后换行。

格式:Console.WriteLine(express)

说明:

在该方法中,可以采用{N[,M]:格式化字符串}}的形式格式化输出字符串,其中各参数含义如下:

{}:用来在输出字符串中插入表达式的值。

N:表示输出表达式的序号,从0开始,必须连续,当为0时,表示输出第一个表达式的值。

M:输出表达式的值所占的列数。

格式化字符串:指定数据按某种格式输出。如E为按科学计数法格式输出,X为按十六进制输出等。有如下几种:

G—常规,E 或 F 中较短的

F—浮点数,常规表示法

E—用 E 表示法表示的浮点数(其中,E 代表 10 的次幂)

N—带有分隔符的浮点数(在美国为逗号)

C—货币,带有货币符号和分隔符(在美国为逗号)

D—十进制数,仅用于整型

X—十六进制数,仅用于整型

1.3.2 Console.Write方法

功能:将数据到控制台,但不产生换行。其余同Console.WriteLine方法。

1.3.3 Console.ReadLine方法

功能:用来从控制台读取一行字符,遇到回车键结束,若没有任何输入则返回null。

1.3.4 Console.Read方法

功能:用来从控制台读取一个字符,并返回其对应的整数值,遇到回车键返回,若没有任何输入则返回-1。

§1.4 创建第一个Windows应用程序

1.4.1 Windows桌面开发环境(IDE)

1.4.1.1 Windows窗体设计器

Windows窗体设计器是进行用户界面设计的主要工具。当创建一个新的Windows应用程序时,会产生一个空白窗体。

当我们双击窗体中的任何一个位置,便会弹出代码设计器。

1.4.1.2 工具箱

工具箱包含.net开发人员可以使用的所有控件集:

1、可以使用其右上角的大头针将其固定。

2、若不小心关闭了工具箱,可以选择“视图/工具箱”将其重新打开。

3、向窗体中添加控件时,可以单某控件,再在窗体中按住鼠标拖动画出控件对象,也可双击控件,在窗体中生成。

4、右击工具箱,可进行工具箱的其它设置。

1.4.1.3 服务器资源管理器

服务器资源管理器是 Visual Studio .NET 的服务器管理控制台。使用服务器资源管理器打开数据连接,登录服务器,浏览它们的数据库和系统服务。可以将节点从服务器资源管理器拖放到 Visual Studio .NET 设计器上。这将创建新的数据组件,这些组件预配置为引用所拖放的项。

1.4.1.4 解决方案资源管理器

解决方案资源管理器提供项目及其文件的有组织的视图,并且提供对项目和文件相关命令的便捷访问。

若要访问解决方案资源管理器,请在“视图”菜单上选择“解决方案资源管理器”。

1.4.1.5 属性窗口

属性窗口显示当前选中控件的属性及事件等信息,用户可以通过此窗口进行控件状态的设置及事件的设计等。当然也可通过代码进行。

1.4.2 Windows应用程序举例

例1:利用标签控件显示“欢迎进入C#编程世界!”。

在设计时应该以下几个问题:

(1)创建一个新项目时,我们可以创建多种类型的项目,因此一定要正确选择相应的项目类型。

(2)创建一个新项目时,一定要注意新项目的保存位置,默认位置是“C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005”,如果不想保存在该文件夹下,则需设置目标文件夹。

(3)创建一个新项目时,系统会在相应的位置创建一个新文件夹,和相应

的文件。

(4)当创建新对象时,对象名称构成一般如下:

对象类型标志+对象实际名称

例2:图片浏览器

§1.5 创建第一个WEB应用程序演示,以后有后续课程,在此不详细讲解。

第2章 C#编程基础

§2.1 变量与常量

相信你应该对变量和常量的概念再熟悉不过了,有关变量和常量的知识都是任何一门编程语言的基础知识,而每一门编程语言都有自己相对应的变量和常量的命名规则和使用方式。

2.1.1 变量

使用变量的一条重要的原则:变量必须先定义后使用,其声明方式同C++。

静态变量:带有“static”修饰符声明的变量称为静态变量。一旦静态变量所属的类被装载,直到包含该类的程序运行结束时它将一直存在。静态变量就是该变量类型的默认值。静态变量最好是在定义时便赋值。如static a =10;

非静态变量:不带有“static”修饰符声明的变量称其为实例变量。如int a;类中的非静态变量,一旦一个类的新的实例被创建,直到该实例不再被应用从而所在空间被释放为止,该非静态变量将一直存在。同样鉴于定义赋值检查,一个类的非静态变量也应该是在初始化的时候赋值。

注:静态变量与非静态变量的区别:静态变量只需分配一次,且只能通过数“类名.变量名”的格式进行访问。而实例变量则随着对象的创建而被创建,且只能通过“对象名.变量名”的方式进行访问。例:

using System;

class StaticTest

{

public static int sta1=10;

public int a2=10;

}

class StaticExample

{

public static void Main()

{

StaticTest a,b;

a=new StaticTest();

b=new StaticTest();

StaticTest.sta1=StaticTest.sta1+10;

a.a2+=10;

StaticTest.sta1=StaticTest.sta1+10;

b.a2+=10;

Console.WriteLine("StaticTest.sta1={0},a.a2={1}",StaticTest.sta1,a.a2);

Console.WriteLine("StaticTest.sta1={0},b.a2={1}",StaticTest.sta1,b.a2);

}

}

分析此程序中各变量的变化情况。

局部变量:局部变量是指在一个独立的程序块中,一个for语句、switch 语句或者using语句中声明的变量,它只在该范围内有效。当程序运行到这个范围内时,该变量即开始生效,程序离开时变量失效。与其他几种变量类型不同的是,局部变量不会自动被初始化,所以也就是没有默认值。在进行赋值检查时,局部变量被认为没有被赋值。

在局部变量的有效范围内,在变量的定义以前就使用是不合法的,如果对局部变量超出了其作用范围,也是不合法的。如下面的代码:

for(int I=0;I<10;I++)

{

int num=a; //这是非法的,因为局部变量a还没有被定义

int a;

int b=a;

}

Num=10; //其访问超出了其作用范围

2.1.2 常量

所谓常量就是其值固定不变的量。从数据类型来讲,常量的类型可以是任何一种值类型或者是引用类型。一个常量的声明,就是声明程序中要用到的常量的名称和它的值,与变量一样,我们可以同时声明一个或者多个给定类型的常量。常量声明的格式如下:

[修饰符] const 类型常量名=常量值

其中:常量修饰符可以是:new、public、protected、internal、private。

常量的类型必须是下面中的一种:

sbyte、byte、short、ushort、int、uint、ulong、char、float、double、decimal、bool、string或是引用类型(reference-type)。

如:public const double X=1.0,Y=2.0,Z=3.0;

一般地,为了和变量想区别,常量用大写字母表示。

§2.2 数据类型

C#支持两种主要类型,即值类型和引用类型。值类型可以分为:简单类型、结构类型、枚举类型;引用类型有四种:类、代表、数组和接口。

(Unsafe类型,不提倡使用)

2.2.1 值类型

2.2.1.1 简单类型

简单类型是直接由一系列元素构成的数据类型。这些简单类型可分为:整数类型、布尔类型、字符类型和实数类型。

(1)整数类型

整数类型的变量的值为整数。C#中有九种整数类型:短字节型(sbyte)、字节型(byte)、短整型(short)、无符号短整型(ushort)、整型(int)、无符号整型(uint)、长整型(long)、无符号长整型(ulong)。

(2)实数类型

浮点类型:数学中的实数不仅包括整数,而且包括小数。小数在C#中采用单精度(float)和双精度(double)。它们的差别在于取值范围和精度不同。

十进制类型(decimal):是C#专门为我们定义的一种高精度的数据类型,主要用于方便我们在金融和货币方面的计算。其范围小于浮点型,但精度比浮点型高,在数据的后面加上“m”,表示该数据是十进制类型。

(3)字符类型(char型)

除了数字以外,计算机还需要处理的信息主要就是字符了。字符包括数字字符、英文字符、表达符号等,C#提供的字符类型采用了国际公认的Unicode字符集标准。一个Unicode的标准字符长度为16位,用它可以表示大多数的字符类型了。

注意:对字符常数,必须用单引号括起,且里面只能有一个字符。

另外,我们还可以直接通过十六进制转义符(前缀\x)或Unicode表示法给字符型变量赋值)(前缀\u),用来在程序中指代特殊的控制字符。

注意:在C#中“\”般作为转义字符使用,若不想作为转义字符使用,则在字符串前使用符号“@”。如:string s = @"c:\aaa"。

(4)布尔类型(bool型)

布尔类型是用来表示一个事件或状态的“真”和“假”。我们知道,不管任何数据,在计算机的内部都是采用二进制方式处理和存储。布尔类型表示的逻辑变量只有两种取值:“真”或“假”,在C#中分别采用“true”和“false”表示。

注意:在C#中布尔类型与整型数据间不能进行转换。

值类型常量后缀:

2.2.1.2 结构类型

在具体的程序设计中我们经常要把一组相关的信息存放在一起。把一系列相关的变量组织成为一个单一实体的过程,称为生成结构的过程。这个单一实体的类型我们就叫做结构类型,每一个变量称为结构的成员。结构类型的变量采用struct来进行声明。下面的程序代码说明定义一个通讯录记录结构(包括姓名、电话和地址)的定义。

using System;

using System.Runtime.InteropServices;

namespace ConsoleApplication4

{

struct PhoneBook

{

public string name;

public string phone;

public string address;

}

class Class1

{

static void Main(string[] args)

{

PhoneBook p1;

https://www.doczj.com/doc/0a9348417.html,="张三";

p1.phone="6815000";

p1.address="黑龙江八一农垦大学";

Console.WriteLine("姓名:{0} 电话:{1} 家庭住址:{2}",https://www.doczj.com/doc/0a9348417.html,,p1.phone,p1.address);

}

}

}

p1就是一个通讯录(PhoneBook)结构类型的变量。上面声明中的“public”表示对结构类型的成员的访问权限。对结构成员的访问通过结构变量名加上访问符“.”号,后跟成员的名称:

https://www.doczj.com/doc/0a9348417.html,=″tom″;

结构类型包含的成员类型没有限制,可以相同也可不同。

值得注意的是:结构与类有很多相似之处,它可以声明构造器、常量、域、方法、属性、索引、操作符和嵌套类型等,但也有区别。如下:

(1) 结构是值类型,而类是引用类型

(2) 类可以被继承,但结构不能被继承

(3) 结构无析构函数。

2.2.1.3 枚举类型

枚举 (enum) 是值类型的一种特殊形式,它从 System.Enum 继承而来,并为基础基元类型的值提供替代名称,实际上是为一组在逻辑上密不可分的整数值提供便于记忆的符号。枚举类型有名称、基础类型和一组字段。基础类型必须是一个内置的有符号(或无符号)整数类型(如Byte、Int32或UInt64)。字段是静态文本字段,其中的每一个字段都表示常数。同一个值可以分配给多个字段。下面的程序代码声明了一个代表星期的枚举类型的变量。

Enum WeekDay{

Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday

};

WeekDay day;

注意:枚举类型的变量在某一时刻只能取枚举中某一个元素的值。如,day 这个表示“星期”的枚举的变量,它的值要么是Sunday,要么是Monday或其他的

星期元素,但它在一个时刻只能代表具体的某一天,不能既是星期二,又是星期三。

Day=Tuseday;

按照系统默认,枚举中的每个元素都是整型(int),且第一个元素的默认值为0,枚举值可以是不连续值,但它后面的每一个连续的元素的值总是在前一个元素值的基础上按加1递增。在枚举中,也可以给元素直接赋值。下面的程序代码把星期一的值设为1,其后的元素的值分别为2,3……

using System;

class Class1

{

enum WeekDay

{ Sunday,Monday=10,Tuesday,Wednesday,Friday,Saturday};

static void Main(string[] args)

{

Console.WriteLine("{0},{1}",WeekDay.Sunday,(int)WeekDay.Sunday);

Console.WriteLine("{0},{1}",WeekDay.Monday,(int)WeekDay.Monday);

Console.WriteLine("{0},{1}",WeekDay.Wednesday,(int)WeekDay.Wednesday);

}

}

为枚举类型的元素所赋值的值的类型限于long、int、short和byte等整数类型。

2.2.1.4 可空类型

可空类型是 System.Nullable 结构的实例。可空类型可以表示其基础值类型正常范围内的值,再加上一个 null 值。例如,Nullable,读作“可空的 Int32”,可以被赋值为 -2147483648 到 2147483647 之间的任意值,也可以被赋值为 null 值。

可空类型可通过下面两种方式中的一种声明:

System.Nullable variable

- 或 -

T? variable

例:

int? k ;

k = null;

k = 100;

Console.WriteLine(k);

可空类型的每个实例都具有两个公共的只读属性:HasValue和Value,通过HasValue属性可以判断该实例是否为空,通过Value属性可取出该实例的值。

2.2.2 引用类型

在这里,引用的含义是该类型的变量不直接存储所包含的值,而是指向它所要存储的值。即引用类型存储实际数据的引用值的地址。值类型内存分配在堆栈中,而引用类型,实际内存则分配在堆中,但在堆栈中创建一个引用变量,其值为堆中实际引用的地址。

C#中的引用类型有四种:类、代表、数组和接口。

using System;

class Class1

{

public int value=0;

}

class Test

{

public static void Main()

{

int val1=0;

int val2=val1; //值类型,内存分配在堆栈中

val2=123;

Class1 ref1=new Class1(); //引用类型,内存分配在堆中

Class1 ref2=new Class1();

ref2=ref1;

ref2.value=123;

Console.WriteLine("values:{0},{1}",val1,val2);

Console.WriteLine("references:{0},{1}",ref1.value,ref2.value);

}

}

堆栈堆

2.2.2.1 类

类是面向对象编程的基本单位,是一种包含数据成员、函数成员和嵌套类型的数据结构。类的数据成员有常量、域和事件。函数成员包括方法、属性、索引指示器、运算符等。类和结构同样都包含了自己的成员,但它们之间最主要的区别在于:类是引用类型,而结构是值类型。

类支持继承机制,通过继承,派生类可以扩展基类的数据成员和函数成员,进而达到代码重用和设计重用的目的。下面介绍两个经常用到的类:object类:它是所有其他类型的基类,C#中的所有类型都直接或是间接地从object类中继承。因此,对一个object的变量可以赋予任何类型的值。

Int x=25;

object obj1;

obj1=x;

object obj2=′A′;

对object类型的变量声明采用object关键字,这个关键字是在.NET平台中为我们提供的预定义的名字空间System中定义的,是类System.Object的别名。

String类:称为字符串类型,专门用于对字符串的操作,字符串必须用“”括起。同样,这个类也是在.NET平台中为我们提供的预定义的名字空间System

中定义的,是类System.String的别名。

字符串在实际中应用非常的广泛,在类的定义中封装了许多内部的操作,我们只要简单地加以利用就可以了。可以用加号“+”合并两个字符串,采用下标从字符串中获取字符等。

String String1=″Welcome″;

string String2=″Welcome″+″everyone″;

char c=String1[0];//可以使用数组的方式去访问其中的每一个字符 bool b=(String1==String2);

2.2.2.2 代表(委托)

在C#中取消了C和C++中的指针的这个概念。而代表(委托)实际上相当于是C#中的函数指针原型,与指针不同的是,代表在C#中是类型安全的。

2.2.2.3 数组

在进行批量处理数据的时候,我们要用到数组。数组是一组类型相同的有序数据。数组按照数组名、数据元素的类型和维数来进行描述。C#中提供Ststem.Array类是所有数组类型的基类。

2.2.2.4 接口

接口定义了一个协议(conrtact)。一个类或结构要实现接口就必须坚持这种协议。接口可以包括方法、属性、索引和事件作为成员。下面的程序代码说明了一个接口,它包含一个索引、一个事件E、一个方法F和一个属性P。

2.2.3 隐式类型――VAR类型

VAR 是3.5新出的一个定义变量的类型,其实也就是弱化类型的定义,VAR 可代替任何类型(可变类型),编译器会根据上下文来判断你到底是想用什么类型。

至于什么情况下用到VAR 我想就是你无法确定自己将用的是什么类型时就可以使用VAR类型,类似 OBJECT但是效率比OBJECT高。

使用var定义变量时有以下四个特点:

1. 必须在定义时初始化。也就是必须是var s = “abcd”形式,而不能是如下形式:

var s;

s = “abcd”;

2. 一但初始化完成,就不能再给变量赋与初始化值类型不同的值了。

3. var要求是局部变量。

4. 使用var定义变量和object不同,它在效率上和使用强类型方式定义变量完全一样。

2.2.4 类型转换

不同的数据类型在一定条件下是可以相互转换的,转换的方法有:

2.2.4.1 隐式转换

隐式转换即由系统进行的转换。能进行隐式转换的数据类型下表。

using System;

class Class1

{

static void Main(string[] args)

{

int i=10;

byte j=20;

short k=34;//若short k=I;则出现错误,不能进行隐式转换

int a=j;

float b=i;

double c=k;

Console.WriteLine("a={0},b={1},c={2}",a,b,c);

}

}

2.2.4.2 显示转换

格式:(类型标识符)表达式

显式转换即由用户进行强行转换。能进行显式转换的数据类型参见MSDN。

例:(int)10.24;

Double x=10.6;

Short y=(short)x

2.2.4.3 使用Convert类进行转换

该类用于将一个基本数据类型转换为另一个基本数据类型。其常用方法如下表:

相关主题
文本预览
相关文档 最新文档