5.23k likes | 5.41k Views
第 1 章 C# 入门基础. Microsoft 公司是这样描述 C# 的:“ C# 是从 C 和 C++ 派生来的一种简单、现代、面向对象和类型安全的编程语言。 C# (读做 'Csharp' )主要是从 C/C++ 编程语言家族移植过来的, C 和 C++ 的程序员会马上熟悉它。 C# 试图结合 Visual Basic 的快速开发能力和 C++ 的强大灵活的能力。”。本章将讲解使用 C# 语言开发的入门知识,主要介绍以下知识点。 .NET Framewrok ; 搭建 Visual Studio 2008 开发环境; 创建第一个控制台应用程序;
E N D
第1章 C#入门基础 • Microsoft公司是这样描述C#的:“C#是从C和C++派生来的一种简单、现代、面向对象和类型安全的编程语言。C#(读做'Csharp')主要是从C/C++编程语言家族移植过来的,C和C++的程序员会马上熟悉它。C#试图结合Visual Basic的快速开发能力和C++的强大灵活的能力。”。本章将讲解使用C#语言开发的入门知识,主要介绍以下知识点。 • .NET Framewrok; • 搭建Visual Studio 2008开发环境; • 创建第一个控制台应用程序; • 创建第一个Windows窗体应用程序。
1.1 C#概述 • C#是一种简单的、现代的、面向对象的、类型安全的编程语言。它不但提供了面向对象编程的技术,而且还提供了面向组件编程的支持技术。Visual C# 2008提供了许多方便开发的工具,如高级代码编辑器、方便的用户界面设计器、集成调试器等。开发人员使用这些工具,可以更容易在C#语言3.0版和.NET Framework 3.5版的基础上开发应用程序。(源码网整理:www.codepub.com)
1.1.1 C#语言 • C#是一种Microsoft公司设计的、简洁的、类型安全的、面向对象的语言,它松散地基于C/C++语言,并且有很多方面和Java语言类似。开发人员可以使用C#语言来构建在.NET Framework上运行的各种安全、可靠的应用程序。 • C#语法表现力强、简单易学、容易上手。通常地,开发人员通过很短的时间的学习,就能够使用C#语言开发高效的程序。C#语法提供了许多强大的功能,如可为空置(null)的值类型、枚举、委托、lambda表达式、直接内存访问等。C#支持泛型类型和方法,进而提供了更为出色的类型安全和性能。特别地,C#还提供了迭代器、语言集成查询(LINQ)表达式等高级功能,使得开发人员可以在C#代码中创建具有查询功能的程序代码。
1.1.2 .NET框架 • C#程序必须在.NET Framework上运行。.NET Framework是Windows的一个不可或缺的组件,是一个支持构建、部署和运行下一代应用程序和Web服务的完整Windows组件。.NET Framework能够提供效率极高的、基于标准的多语言(如C#、VB.NET、C++、J#等)环境,能够将现有的应用程序与下一代应用程序和服务集成,并能迅速部署和操作Internet规模的应用程序。.NET Framework主要包括两个组件:公共语言运行库(Common Language Runtime,简称为CLR)和.NET Framework类库(Class Library)。 • 1.公共语言运行库 • 2..NET Framework类库 • 3.公共语言运行库、.NET Framework类库和应用程序的关系 • 4.语言互操作性 • 5.C#应用程序执行流程
1.1.3 C#应用程序 • C#应用程序包括两种应用程序:控制台(Console)应用程序(1.3小节创建的应用程序就是一个控制台应用程序)和Windows窗体应用程序(1.4小节创建的应用程序就是一个Windows窗体应用程序)。控制台应用程序的界面往往比较简单,而Windows窗体应用程序能够提供丰富的图形界面。 • 1.控制台应用程序 • 2.Windows窗体应用程序
1.2 搭建Visual Studio 2008开发环境 • 本小节介绍搭建开发C#应用程序(如Windows窗体应用程序、ASP.NET网站等)的环境,包括安装Microsoft Visual Studio 2008、配置集成开发环境(IDE)、熟悉集成开发环境(IDE)等内容。 • 注意:笔者机器的操作系统为Microsoft Windows Server 2003 Enterprise Edition Service Park 2。
1.2.1 安装Microsoft Visual Studio 2008 • 下面介绍在笔者机器上安装Microsoft Visual Studio Team System 2008简体中文版的操作步骤,具体如下。
1.2.2 配置集成开发环境(IDE) • 由于Microsoft Visual Studio 2008集成开发环境(IDE)非常复杂,为了以后能够更加方便地开发各种C#应用程序,在此,特意详细介绍配置Microsoft Visual Studio 2008集成开发环境的方法。
1.2.3 熟悉集成开发环境(IDE) • Microsoft Visual Studio 2008集成开发环境包括多个可以停靠或浮动的面板,如“工具箱”、“服务器资源管理器”、“解决方案资源管理器”、“属性”等面板。
1.3 创建第一个控制台应用程序 • 本节介绍使用Microsoft Visual Studio 2008集成开发环境(IDE)创建第一个控制台应用程序——Sample_01_CA的方法,以及开发Sample_01_CA应用程序所涉及的各种基本技术,如编写C#代码、运行应用程序等。
1.3.1 创建Sample_01_CA控制台应用程序 • 依次选择“开始”|“所有程序”|“Microsoft Visual Studio 2008”|“Microsoft Visual Studio 2008”命令,打开“起始页 - Microsoft Visual Studio”对话框。单击“最近项目”面板中的“创建”下的“项目”链接,弹出“新建项目”对话框,如图1.24所示。
1.3.2 解决方案资源管理器 • 创建Sample_01_CA控制台应用程序成功之后,Microsoft Visual Studio 2008集成开发环境(IDE)将为该应用程序创建一个默认类文件,名称为“Program.cs”。打开“解决方案资源管理器”面板,可以查看Sample_01_CA控制台应用程序包含的所有资源和数据,如图1.25所示。
1.3.3 Program.cs文件 • 双击“解决方案资源管理器”面板中的“Program.cs”节点,打开Program.cs文件。该文件为Sample_01_CA控制台应用程序提供主入口点。
1.3.4 AssemblyInfo.cs文件 • 首先展开“解决方案资源管理器”面板中的“Properties”节点,然后双击“AssemblyInfo.cs”节点打开AssemblyInfo.cs文件。该文件用来配置Sample_01_CA控制台应用程序的程序集信息。
1.3.5 运行应用程序 • 按下“F5”按钮或者单击Microsoft Visual Studio 2008集成开发环境中的按钮即可运行Sample_01_CA控制台应用程序。该应用程序运行之后,显示一个黑色的控制台对话框,如图1.26所示。
1.4 创建第一个Windows窗体应用程序 • 本节介绍使用Microsoft Visual Studio 2008集成开发环境(IDE)创建第一个Windows窗体应用程序——Sample_01_WFA的方法,以及开发Sample_01_WFA应用程序所涉及的各种基本技术,如设计Windows窗体、编写C#代码、配置应用程序、运行应用程序等。
1.4.1 创建Sample_01_WFA Windows窗体应用程序 • 依次选择“开始”|“所有程序”|“Microsoft Visual Studio 2008”|“Microsoft Visual Studio 2008”命令,打开“起始页 - Microsoft Visual Studio”对话框。单击“最近项目”面板中的“创建”下的“项目”链接,弹出“新建项目”对话框,如图1.27所示。
1.4.2 解决方案资源管理器 • 创建Sample_01_WFA Windows窗体应用程序成功之后,Microsoft Visual Studio 2008集成开发环境(IDE)将为该应用程序创建一个默认Windows窗体,名称为“Form1.cs”。打开“解决方案资源管理器”面板,可以查看Sample_01_WFA Windows窗体应用程序包含的所有资源和数据,如图1.28所示。
1.4.3 Form1.cs窗体 • 在“解决方案资源管理器”面板中双击“Form1.cs”节点,打开Form1.cs窗体的设计界面,如图1.29所示。此时,开发人员可以直接将“工具箱”面板中的控件拖放到“Form1.cs”窗体上。
1.4.4 Form1.Designer.cs文件 • 首先展开“解决方案资源管理器”面板中的“Form1.cs”节点,然后双击“Form1.Designer.cs”节点打开Form1.Designer.cs文件。该文件中的代码为Form1.cs窗体的设计代码,用来描述Form1.cs窗体上的每一个控件。
1.4.5 Form1.cs窗体的代码 • 右击“解决方案资源管理器”面板中的“Form1.cs”节点,打开Form1.cs窗体的代码文件。该文件保存Form1.cs窗体的事件等设计代码。
1.4.6 Program.cs文件 • 双击“解决方案资源管理器”面板中的“Program.cs”节点,打开Program.cs文件。该文件为Sample_01_WFA Windows窗体应用程序提供主入口点。
1.4.7 AssemblyInfo.cs文件 • 首先展开“解决方案资源管理器”面板中的“Properties”节点,然后双击“AssemblyInfo.cs”节点打开AssemblyInfo.cs文件。该文件用来配置Sample_01_WFA Windows窗体应用程序的程序集信息。
1.4.8 运行应用程序 • 按下“F5”按钮或者单击Microsoft Visual Studio 2008集成开发环境中的“”按钮即可运行Sample_01_WFA Windows窗体应用程序。该应用程序运行之后,显示的第一个对话框为“Form1”对话框,如图1.30所示。
1.5 小结 • 本章主要介绍了搭建开发Visual Studio 2008集成开发环境,以及C#语言和.NET Framework的概述。其中,读者要着重掌握使用Visual Studio 2008集成开发环境开发第一个控制台应用程序和Windows窗体应用程序的方法。只有这样,才能进行后续的开发。下一章将要介绍使用C#语言如何编写第一个应用程序。
1.6 习题 • 1.在本章介绍的Sample_01_WFA Windows窗体应用程序之上,实现以下功能。 • (1)添加名称为“Dialog.cs”的窗体到应用程序中。 • (2)运行该应用程序。
第2章 C#基本概念 • C#语言从1.0版本发展到3.0版本经历了比较长的时间,现在已经是一种比较完善、简单、易学的编程语言。为了读者能够首先对C#语言有一个简单的认识,笔者特意在本章介绍了Hello World应用程序和C#语言的一些常见的基本概念,主要介绍以下知识点。 • 创建Hello World应用程序; • 编译Hello World应用程序; • 运行Hello World应用程序; • C#程序的概念扩展。
2.1 创建Hello world应用程序 • 对于C#初学者而言,Hello world应用程序是C#语言入门最好的、简单的示例程序。该程序可以在控制台中显示“Hello world”字符串。下面介绍书写该程序的基本方法。
2.1.1 创建hello.txt文本文件 • 为了方便初学者真正认识C#程序,我们这里不使用集成开发环境来编写本程序,而是使用记事本来编写程序。新建一个名称为“hello.txt”的文本文件,并打开该文件。
2.1.2 创建HelloWorld类 • 任何一个C#应用程序都是由类(class)组成。一个C#应用程序可以包括一个类或多个类。类实际上是对某种类型的对象定义变量和方法的原型。它表示对现实生活中一类具有共同特征的事物的抽象,是面向对象程序设计(Object-Oriented Programming,简称为OOP)的基础。 • 面向对象程序设计指一种程序设计范型,它将对象作为程序的基本单元。在面向对象程序设计中,最为基本的概念是类(class)和对象(object),对象又称为实例。 • 1.类 • 2.对象
2.1.3 添加Main()方法 • 一旦创建一个类之后,但是不为该类添加任何成员,那么该类就是一个空类,即它不能描述世界上的任何一种对象。为了使得类能够描述一种对象,那么就需要为该类添加一些属性和行为。 • 一个行为就产生一个动作。在类中,使用方法(method)来描述这一行为。也就是说,方法是一个类能做的事情(即一些计算或操作),但是并没有做这事情。作为一条狗而言,它是会吠叫、会坐下、会吃。因此,为了能够使用Dog类描述狗,那么就需要在该类中定义以下3个方法。 • Bark(),吠叫。 • Sit(),坐下。 • Eat(),吃。
2.1.4 调用WriteLine()方法 • 在Dog类中,虽然定义了狗的3个行为:吠叫、坐下和吃,但是并没有使这3个行为发生。如果想要芊芊这一条狗吠叫,那么就需要一个主动的动作使得芊芊吠叫。这一个主动的动作就是调用该行为对应的方法,即通过调用方法使得该方法对应的行为发生。
2.1.5 引入System命名空间 • 世界上存在很多狗,而且一些狗的名字也相同。譬如,张三家的狗叫芊芊,而李四家的狗也叫芊芊。那么如何区分这两家的狗呢?自然,称呼张三家的狗可能是“张三家的芊芊”,称呼李四家的狗可能是“李四家的芊芊”。通过这种方式,就能够区分张三家和李四家的芊芊了。
2.1.6 整理Hello world应用程序的代码 • 经过上述步骤之后,就已经书写了一个完整的C#应用程序——Hello world应用程序,它的完整的程序代码如下。 • using System; • class HelloWorld • { • static void Main() • { • Console.WriteLine("Hello, World"); • } • }
2.2 编译和运行Hello World应用程序 • 2.1小节仅仅书写了Hello world应用程序的代码。如果要将这一段程序代码成为一个可以执行的文件,则需要使用Microsoft C#编译器编译这一段代码。 • (源码网整理:www.codepub.com)
2.3 C#程序的概念扩展 • 在2.1小节中介绍了C#面向对象程序设计的一些基本概念,如类、对象、实例、属性、方法、调用方法等。除了上述这些概念之外,还有一些比较常用的概念,如继承性、多态性等。 • 1.继承性 • 2.多态性 • 3.接口
2.4 小结 • 本章主要介绍了“Hello world”应用程序,包括创建Hello World应用程序、编译Hello World应用程序、运行Hello World应用程序和分析Hello World应用程序。其中,读者需要着重掌握使用记事本创建Hello World应用程序的方法。下一章将介绍C#的类型。
2.5 习题 • 使用记事本撰写一个名称为“Test_02”的C#应用程序的代码,并将此代码编译为一个名称为“Test_02.exe”的可执行文件。Test_02应用程序在控制台显示“This is a C# program.”字符串。
第3章 类型 • 类型是C#语言中最为基本的概念之一。不同类型的变量将拥有不同的数据存储方式和操作方法。C#语言的类型系统是统一的,它可以把任何类型的值都按照对象来处理。本章将讲解C#语言中各种类型,主要介绍以下知识点 • 值类型; • 引用类型; • 装箱; • 拆箱。
3.1 类型概述 • C#语言中的每一个类型都直接或间接派生于object类型,即object类型是C#语言所有类型的最终基类型。C#语言的类型可以分为以下3种类型。 • 值类型(value-type),它的变量直接包含其数据。 • 引用类型(reference-type),它的变量只存储对其数据的引用(即访问其数据的访问地址)。引用类型的变量又称为对象(object)。 • 指针类型(point-type),和C、C++语言中的指针类似,而且只能用作在不安全代码中。由于在C#编程中很少使用指针类型,因此,在此不做详细介绍。
3.2 值类型 • 值类型要么是结构类型,要么是枚举类型。值类型的变量直接包含其数据,而且其值不可能为null。在操作值类型的变量时,只会影响该变量的数据,而不会影响另外一个变量的值。所有的值类型都直接或间接派生于System.ValueType类型。 • 值类型包括结构类型、枚举类型、布尔类型、自定义结构类型、sbyte、byte、char、short、ushort、int、uint、long、ulong、float、double和decimal类型。其中,C#语言提供了一种被称为“简单类型(simple type)”的预定义结构类型。这些类型通过C#保留字标识,如char、int等。本节将详细介绍值类型的知识点。
3.2.1 System.ValueType类型 • 所有值类型都直接或间接从System.ValueType类隐式继承而来,并且任何类型不能从值类型派生而来。System.ValueType本身是一个类,它只包含以下3个方法。 • Equals(),判定当前实例与指定的对象是否相等。 • GetHashCode(),返回当前实例的哈希代码。该哈希代码用于哈希表(一种数据结构)的散列运算。 • ToString(),返回当前实例的完全限定类型名称。
3.2.2 整数类型 • 整数类型包括9种类型,如sbyte、byte、short等。它们的具体说明、.NET Framework中的名称和取值范围如表3.1所示。 • 1.int类型 • 2.long类型 • 3.char类型
3.2.3 浮点型 • C#语言包括两种浮点型:float和double。float类型表示32位的单精度浮点数,它的取值范围为±1.5e-45~±3.4e38。double类型表示64位的双精度浮点数,它的取值范围为±5.0e-324~±1.7e308。浮点数包括以下3种特殊的值。 • 正零和负零 • 正无穷大和负无穷大 • 非数字(Not-a-Number)值
3.2.4 decimal类型 • decimal类型表示128位的数值,取值范围为±1.0e-28~±7.9e28,特别适用于财务计算和货币计算。和float类型一样,在书写decimal类型的值时,需要在数值后添加后缀m,否则编译出错。 • 与浮点型相比,decimal类型具有较高的精度,但取值范围较小。因此,从浮点型到decimal类型的转换可能会产生溢出异常,而从decimal类型到浮点型的转换则可能导致精度损失。正是由于这些原因,所以,在浮点型和decimal类型之间不存在隐式转换。如果要转换浮点型到decimal类型,则必须使用强制转换方法。
3.2.5 bool类型 • bool类型表示布尔逻辑量。它只包含两个值:true和false,而且这两个值意义恰好相反。
3.2.6 枚举类型 • 枚举(enum)类型也是一种值类型,它具有命名常量的独特的类型。每个枚举类型都有一个基础类型,该基础类型必须为byte、sbyte、short、ushort、int、uint、long或ulong。其中,默认的基础类型为int。 • 枚举类型一般包含一个或多个枚举值,每一个枚举值之间用逗号(,)分隔。枚举值又称为枚举数,它的默认基础类型为int。默认情况下,第一个枚举数的值为0,后面的每一个枚举数的值依次增1。
3.2.7 结构类型 • 结构类型也是一种值类型,它可以声明常量、字段、方法、属性、索引器、运算符、实例构造函数、静态构造函数和嵌套类型。有关结构类型的知识点将在第9章中进行详细介绍。
3.2.8 实例一:把整数转换为二进制数 • 【实例3-1】实现把整数转换为二进制数的功能。该功能由ConvertIntToBinary(int n)静态函数实现,n参数表示被转换的整数,该函数返回二进制数的字符串形式。
3.2.9 实例二:把二进制数转换为整数 • 【实例3-2】实现把二进制数转换为整数的功能。该功能由ConvertBinaryToInt(string binary)静态函数实现,binary参数表示被转换的二进制数的字符串形式,该函数返回一个整数。