为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

C#从入门到实践

2011-10-15 50页 ppt 3MB 22阅读

用户头像

is_252316

暂无简介

举报
C#从入门到实践null第1章 C#入门基础第1章 C#入门基础Microsoft公司是这样描述C#的:“C#是从C和C++派生来的一种简单、现代、面向对象和类型安全的编程语言。C#(读做'Csharp')主要是从C/C++编程语言家族移植过来的,C和C++的程序员会马上熟悉它。C#试图结合Visual Basic的快速开发能力和C++的强大灵活的能力。”。本章将讲解使用C#语言开发的入门知识,主要介绍以下知识点。 .NET Framewrok; 搭建Visual Studio 2008开发环境; 创建第一个控制台应用程序; 创建第一个W...
C#从入门到实践
null第1章 C#入门基础第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#概述1.1 C#概述C#是一种简单的、现代的、面向对象的、类型安全的编程语言。它不但提供了面向对象编程的技术,而且还提供了面向组件编程的支持技术。Visual C# 2008提供了许多方便开发的工具,如高级代码编辑器、方便的用户界面器、集成调试器等。开发人员使用这些工具,可以更容易在C#语言3.0版和.NET Framework 3.5版的基础上开发应用程序。1.1.1 C#语言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框架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#应用程序1.1.3 C#应用程序C#应用程序包括两种应用程序:控制台(Console)应用程序(1.3小节创建的应用程序就是一个控制台应用程序)和Windows窗体应用程序(1.4小节创建的应用程序就是一个Windows窗体应用程序)。控制台应用程序的界面往往比较简单,而Windows窗体应用程序能够提供丰富的图形界面。 1.控制台应用程序 2.Windows窗体应用程序1.2 搭建Visual Studio 2008开发环境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 20081.2.1 安装Microsoft Visual Studio 2008下面介绍在笔者机器上安装Microsoft Visual Studio Team System 2008简体中文版的操作步骤,具体如下。1.2.2 配置集成开发环境(IDE)1.2.2 配置集成开发环境(IDE)由于Microsoft Visual Studio 2008集成开发环境(IDE)非常复杂,为了以后能够更加方便地开发各种C#应用程序,在此,特意详细介绍配置Microsoft Visual Studio 2008集成开发环境的方法。1.2.3 熟悉集成开发环境(IDE)1.2.3 熟悉集成开发环境(IDE)Microsoft Visual Studio 2008集成开发环境包括多个可以停靠或浮动的面板,如“工具箱”、“服务器资源管理器”、“解决资源管理器”、“属性”等面板。1.3 创建第一个控制台应用程序1.3 创建第一个控制台应用程序本节介绍使用Microsoft Visual Studio 2008集成开发环境(IDE)创建第一个控制台应用程序——Sample_01_CA的方法,以及开发Sample_01_CA应用程序所涉及的各种基本技术,如编写C#代码、运行应用程序等。1.3.1 创建Sample_01_CA控制台应用程序1.3.1 创建Sample_01_CA控制台应用程序依次选择“开始”|“所有程序”|“Microsoft Visual Studio 2008”|“Microsoft Visual Studio 2008”命令,打开“起始页 - Microsoft Visual Studio”对话框。单击“最近项目”面板中的“创建”下的“项目”链接,弹出“新建项目”对话框,如图1.24所示。1.3.2 解决方案资源管理器1.3.2 解决方案资源管理器创建Sample_01_CA控制台应用程序成功之后,Microsoft Visual Studio 2008集成开发环境(IDE)将为该应用程序创建一个默认类文件,名称为“Program.cs”。打开“解决方案资源管理器”面板,可以查看Sample_01_CA控制台应用程序包含的所有资源和数据,如图1.25所示。1.3.3 Program.cs文件1.3.3 Program.cs文件双击“解决方案资源管理器”面板中的“Program.cs”节点,打开Program.cs文件。该文件为Sample_01_CA控制台应用程序提供主入口点。1.3.4 AssemblyInfo.cs文件1.3.4 AssemblyInfo.cs文件首先展开“解决方案资源管理器”面板中的“Properties”节点,然后双击“AssemblyInfo.cs”节点打开AssemblyInfo.cs文件。该文件用来配置Sample_01_CA控制台应用程序的程序集信息。1.3.5 运行应用程序1.3.5 运行应用程序按下“F5”按钮或者单击Microsoft Visual Studio 2008集成开发环境中的按钮即可运行Sample_01_CA控制台应用程序。该应用程序运行之后,显示一个黑色的控制台对话框,如图1.26所示。1.4 创建第一个Windows窗体应用程序1.4 创建第一个Windows窗体应用程序本节介绍使用Microsoft Visual Studio 2008集成开发环境(IDE)创建第一个Windows窗体应用程序——Sample_01_WFA的方法,以及开发Sample_01_WFA应用程序所涉及的各种基本技术,如设计Windows窗体、编写C#代码、配置应用程序、运行应用程序等。1.4.1 创建Sample_01_WFA Windows窗体应用程序1.4.1 创建Sample_01_WFA Windows窗体应用程序依次选择“开始”|“所有程序”|“Microsoft Visual Studio 2008”|“Microsoft Visual Studio 2008”命令,打开“起始页 - Microsoft Visual Studio”对话框。单击“最近项目”面板中的“创建”下的“项目”链接,弹出“新建项目”对话框,如图1.27所示。1.4.2 解决方案资源管理器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窗体1.4.3 Form1.cs窗体在“解决方案资源管理器”面板中双击“Form1.cs”节点,打开Form1.cs窗体的设计界面,如图1.29所示。此时,开发人员可以直接将“工具箱”面板中的控件拖放到“Form1.cs”窗体上。1.4.4 Form1.Designer.cs文件1.4.4 Form1.Designer.cs文件首先展开“解决方案资源管理器”面板中的“Form1.cs”节点,然后双击“Form1.Designer.cs”节点打开Form1.Designer.cs文件。该文件中的代码为Form1.cs窗体的设计代码,用来描述Form1.cs窗体上的每一个控件。1.4.5 Form1.cs窗体的代码1.4.5 Form1.cs窗体的代码右击“解决方案资源管理器”面板中的“Form1.cs”节点,打开Form1.cs窗体的代码文件。该文件保存Form1.cs窗体的事件等设计代码。1.4.6 Program.cs文件1.4.6 Program.cs文件双击“解决方案资源管理器”面板中的“Program.cs”节点,打开Program.cs文件。该文件为Sample_01_WFA Windows窗体应用程序提供主入口点。1.4.7 AssemblyInfo.cs文件1.4.7 AssemblyInfo.cs文件首先展开“解决方案资源管理器”面板中的“Properties”节点,然后双击“AssemblyInfo.cs”节点打开AssemblyInfo.cs文件。该文件用来配置Sample_01_WFA Windows窗体应用程序的程序集信息。1.4.8 运行应用程序1.4.8 运行应用程序按下“F5”按钮或者单击Microsoft Visual Studio 2008集成开发环境中的“”按钮即可运行Sample_01_WFA Windows窗体应用程序。该应用程序运行之后,显示的第一个对话框为“Form1”对话框,如图1.30所示。1.5 小结1.5 小结本章主要介绍了搭建开发Visual Studio 2008集成开发环境,以及C#语言和.NET Framework的概述。其中,读者要着重掌握使用Visual Studio 2008集成开发环境开发第一个控制台应用程序和Windows窗体应用程序的方法。只有这样,才能进行后续的开发。下一章将要介绍使用C#语言如何编写第一个应用程序。1.6 习题1.6 习题1.在本章介绍的Sample_01_WFA Windows窗体应用程序之上,实现以下功能。 (1)添加名称为“Dialog.cs”的窗体到应用程序中。 (2)运行该应用程序。 第2章 C#基本概念第2章 C#基本概念C#语言从1.0版本发展到3.0版本经历了比较长的时间,现在已经是一种比较完善、简单、易学的编程语言。为了读者能够首先对C#语言有一个简单的认识,笔者特意在本章介绍了Hello World应用程序和C#语言的一些常见的基本概念,主要介绍以下知识点。 创建Hello World应用程序; 编译Hello World应用程序; 运行Hello World应用程序; C#程序的概念扩展。2.1 创建Hello world应用程序2.1 创建Hello world应用程序对于C#初学者而言,Hello world应用程序是C#语言入门最好的、简单的示例程序。该程序可以在控制台中显示“Hello world”字符串。下面介绍写该程序的基本方法。2.1.1 创建hello.txt文本文件2.1.1 创建hello.txt文本文件为了方便初学者真正认识C#程序,我们这里不使用集成开发环境来编写本程序,而是使用记事本来编写程序。新建一个名称为“hello.txt”的文本文件,并打开该文件。2.1.2 创建HelloWorld类2.1.2 创建HelloWorld类任何一个C#应用程序都是由类(class)组成。一个C#应用程序可以包括一个类或多个类。类实际上是对某种类型的对象定义变量和方法的原型。它表示对现实生活中一类具有共同特征的事物的抽象,是面向对象程序设计(Object-Oriented Programming,简称为OOP)的基础。 面向对象程序设计指一种程序设计范型,它将对象作为程序的基本单元。在面向对象程序设计中,最为基本的概念是类(class)和对象(object),对象又称为实例。 1.类 2.对象2.1.3 添加Main()方法2.1.3 添加Main()方法一旦创建一个类之后,但是不为该类添加任何成员,那么该类就是一个空类,即它不能描述世界上的任何一种对象。为了使得类能够描述一种对象,那么就需要为该类添加一些属性和行为。 一个行为就产生一个动作。在类中,使用方法(method)来描述这一行为。也就是说,方法是一个类能做的事情(即一些计算或操作),但是并没有做这事情。作为一条狗而言,它是会吠叫、会坐下、会吃。因此,为了能够使用Dog类描述狗,那么就需要在该类中定义以下3个方法。 Bark(),吠叫。 Sit(),坐下。 Eat(),吃。2.1.4 调用WriteLine()方法2.1.4 调用WriteLine()方法在Dog类中,虽然定义了狗的3个行为:吠叫、坐下和吃,但是并没有使这3个行为发生。如果想要芊芊这一条狗吠叫,那么就需要一个主动的动作使得芊芊吠叫。这一个主动的动作就是调用该行为对应的方法,即通过调用方法使得该方法对应的行为发生。2.1.5 引入System命名空间2.1.5 引入System命名空间世界上存在很多狗,而且一些狗的名字也相同。譬如,张三家的狗叫芊芊,而李四家的狗也叫芊芊。那么如何区分这两家的狗呢?自然,称呼张三家的狗可能是“张三家的芊芊”,称呼李四家的狗可能是“李四家的芊芊”。通过这种方式,就能够区分张三家和李四家的芊芊了。2.1.6 整理Hello world应用程序的代码2.1.6 整理Hello world应用程序的代码经过上述步骤之后,就已经书写了一个完整的C#应用程序——Hello world应用程序,它的完整的程序代码如下。 using System; class HelloWorld { static void Main() { Console.WriteLine("Hello, World"); } }2.2 编译和运行Hello World应用程序2.2 编译和运行Hello World应用程序2.1小节仅仅书写了Hello world应用程序的代码。如果要将这一段程序代码成为一个可以执行的文件,则需要使用Microsoft C#编译器编译这一段代码。2.3 C#程序的概念扩展2.3 C#程序的概念扩展在2.1小节中介绍了C#面向对象程序设计的一些基本概念,如类、对象、实例、属性、方法、调用方法等。除了上述这些概念之外,还有一些比较常用的概念,如继承性、多态性等。 1.继承性 2.多态性 3.接口2.4 小结2.4 小结本章主要介绍了“Hello world”应用程序,包括创建Hello World应用程序、编译Hello World应用程序、运行Hello World应用程序和Hello World应用程序。其中,读者需要着重掌握使用记事本创建Hello World应用程序的方法。下一章将介绍C#的类型。2.5 习题2.5 习题使用记事本撰写一个名称为“Test_02”的C#应用程序的代码,并将此代码编译为一个名称为“Test_02.exe”的可执行文件。Test_02应用程序在控制台显示“This is a C# program.”字符串。 第3章 类型第3章 类型类型是C#语言中最为基本的概念之一。不同类型的变量将拥有不同的数据存储方式和操作方法。C#语言的类型系统是统一的,它可以把任何类型的值都按照对象来处理。本章将讲解C#语言中各种类型,主要介绍以下知识点 值类型; 引用类型; 装箱; 拆箱。3.1 类型概述3.1 类型概述C#语言中的每一个类型都直接或间接派生于object类型,即object类型是C#语言所有类型的最终基类型。C#语言的类型可以分为以下3种类型。 值类型(value-type),它的变量直接包含其数据。 引用类型(reference-type),它的变量只存储对其数据的引用(即访问其数据的访问地址)。引用类型的变量又称为对象(object)。 指针类型(point-type),和C、C++语言中的指针类似,而且只能用作在不安全代码中。由于在C#编程中很少使用指针类型,因此,在此不做详细介绍。3.2 值类型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类型3.2.1 System.ValueType类型所有值类型都直接或间接从System.ValueType类隐式继承而来,并且任何类型不能从值类型派生而来。System.ValueType本身是一个类,它只包含以下3个方法。 Equals(),判定当前实例与指定的对象是否相等。 GetHashCode(),返回当前实例的哈希代码。该哈希代码用于哈希表(一种数据结构)的散列运算。 ToString(),返回当前实例的完全限定类型名称。3.2.2 整数类型3.2.2 整数类型整数类型包括9种类型,如sbyte、byte、short等。它们的具体说明、.NET Framework中的名称和取值范围如表3.1所示。 1.int类型 2.long类型 3.char类型3.2.3 浮点型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类型3.2.4 decimal类型decimal类型表示128位的数值,取值范围为±1.0e-28~±7.9e28,特别适用于财务计算和货币计算。和float类型一样,在书写decimal类型的值时,需要在数值后添加后缀m,否则编译出错。 与浮点型相比,decimal类型具有较高的精度,但取值范围较小。因此,从浮点型到decimal类型的转换可能会产生溢出异常,而从decimal类型到浮点型的转换则可能导致精度损失。正是由于这些原因,所以,在浮点型和decimal类型之间不存在隐式转换。如果要转换浮点型到decimal类型,则必须使用强制转换方法。3.2.5 bool类型3.2.5 bool类型bool类型表示布尔逻辑量。它只包含两个值:true和false,而且这两个值意义恰好相反。3.2.6 枚举类型3.2.6 枚举类型枚举(enum)类型也是一种值类型,它具有命名常量的独特的类型。每个枚举类型都有一个基础类型,该基础类型必须为byte、sbyte、short、ushort、int、uint、long或ulong。其中,默认的基础类型为int。 枚举类型一般包含一个或多个枚举值,每一个枚举值之间用逗号(,)分隔。枚举值又称为枚举数,它的默认基础类型为int。默认情况下,第一个枚举数的值为0,后面的每一个枚举数的值依次增1。3.2.7 结构类型3.2.7 结构类型结构类型也是一种值类型,它可以声明常量、字段、方法、属性、索引器、运算符、实例构造函数、静态构造函数和嵌套类型。有关结构类型的知识点将在第9章中进行详细介绍。3.2.8 实例一:把整数转换为二进制数3.2.8 实例一:把整数转换为二进制数【实例3-1】实现把整数转换为二进制数的功能。该功能由ConvertIntToBinary(int n)静态函数实现,n参数表示被转换的整数,该函数返回二进制数的字符串形式。3.2.9 实例二:把二进制数转换为整数3.2.9 实例二:把二进制数转换为整数【实例3-2】实现把二进制数转换为整数的功能。该功能由ConvertBinaryToInt(string binary)静态函数实现,binary参数表示被转换的二进制数的字符串形式,该函数返回一个整数。3.3 引用类型3.3 引用类型引用类型主要包括6种类型:object类型、string类型、类类型、数组类型、接口类型和委托类型。引用类型变量的值是对该类型的某个实例的一个引用。其中,类型的实例被称为对象。在引用类型中,存在一个很特殊的值:null。null能够兼容所有的引用类型,表示“每一被引用的实例”。本节将详细介绍引用类型的知识点。3.3.1 对象类型3.3.1 对象类型对象(object)类型是C#类型系统中所有其他类型的最终基类。C#中的每种类型都是直接或间接从object类类型派生的。因此,C#中的任何类型都可以转换为object类型。3.3.2 字符串类型3.3.2 字符串类型字符串(string)类型是直接从object继承而来的类类型,它对应着.NET Framework中的System.String类型。3.3.3 类类型3.3.3 类类型类(class)类型是C#中最常用的类型。它是一个数据结构,能够定义数据成员、函数成员和嵌套类型等内容。其中,数据成员包括常量和字段,函数成员包括方法、属性、事件、索引器、运算符、实例构造函数、析构函数和静态构造函数。 特别地,类类型还支持一种被称为“继承”的机制。继承是指派生类可用来扩展和专门化基类的一种机制。有关类类型的知识点将在第8章中进行详细介绍。3.3.4 数组类型3.3.4 数组类型数组(Array)是一种数据结构,它可以将多个类型相同的元素组合为一个整体,从而通过数组统一访问或操作这些元素。数字可以通过计算索引来访问数组中的每一个元素。每一个元素的类型称为数字的元素类型。3.3.5 接口类型3.3.5 接口类型接口(interface)类型和类类型非常相似。它也是一个数据结构,能够声明数据成员和函数成员。其中,数据成员主要包括属性,函数成员包括方法和事件。3.3.6 委托类型3.3.6 委托类型委托(delegate)也是一种数据结构,它能够引用一个或多个方法。特别地,对于实例方法,它还能够引用这些方法所对应的对象实例。读者如果熟悉C++中的函数指针,那么就不难理解委托这一概念了。 委托类型类似于C++中的函数指针,但是它是类型安全的。委托类型能够将方法作为参数进行传递,并且还可以定义回调方法。3.4 装箱和拆箱3.4 装箱和拆箱引用类型总是分配在托管堆上,而值类型总是分配在堆栈上。有时,程序需要获取指向值类型的引用。此时,需要将值类型转换为引用类型,这一操作被称为装箱。反之,把引用类型转换为值类型称为拆箱。 装箱和拆箱是C#的类型系统中两个很重要的概念,它在值类型和引用类型之间的架起了一座桥梁。通过装箱和拆箱操作,可以将任何值类型的变量的值转换为引用类型的变量的值。反之,也可以进行转换。特别地,有了装箱和拆箱操作,就可以将C#类型系统中的任何类型的值最终都可以按对象来处理。3.4.1 装箱3.4.1 装箱装箱是指将值类型隐式转换为引用类型。对于值类型而言,装箱的具体操作为:首先分配一个对象实例,然后将值类型的值复制到该实例中。装箱前后不是同一个实例。对于引用类型而言,装箱前后都共享同一个实例。3.4.2 拆箱3.4.2 拆箱拆箱是指将引用类型隐式转换为值类型。拆箱的具体操作包括以下2个步骤。 (1)检查该对象实例是否为给定值类型的一个装了箱的值。 (2)将值从实例中复制出来。3.5 小结3.5 小结本章主要介绍了C#语言的类型系统的基础知识,如值类型、引用类型、类型转换、装箱、拆箱等。其中,读者要着重掌握值类型和引用类型,为后续编写C#程序代码奠定基础。下一章将要介绍C#语言中的变量。3.6 习题3.6 习题在Visual Studio 2008集成开发环境中创建名称为“Test_03”的控制台应用程序,并实现以下功能。 (1)将名称为“class1.cs”的文件添加到该应用程序中。 (2)创建一个整型变量vint和一个字符串变量vstring,将vint变量转换为字符串,将vstring变量转换为一个整数。 第4章 变量第4章 变量变量是C#语言中最为基本的概念之一,它表示存储位置。每一个变量的值由其类型确定。本章将讲解C#语言中各种变量,主要介绍以下知识点。 变量概述; 变量分类; 变量赋值; 使用值参数传递数据; 使用ref参数传递数据; 使用out参数传递数据; 变量转换。4.1 变量概述4.1 变量概述在C#语言中,变量表示存储位置。每一个变量都具有一个类型,该类型确定变量存储的内容。对于两个变量而言,如果它们的值相同,但是类型不同,那么该变量存储的值是不相同的。 声明一个变量之后,该变量可能具有初始值,也可能不具有初始值。如果变量具有初始值,则称之为初始已赋值(initially assigned)。如果变量不具有初始值,则称之为初始未赋值(initially unassigned)。 如果是第一次明确指定变量的值,则称之为变量的初始化。如果是初始未赋值变量,必须经过初始化之后,才能够被使用。4.2 变量分类4.2 变量分类C#语言定义了7种不同类别的变量:静态变量、实例变量、数组元素、值参数、引用参数、输出参数和局部变量。本小节将详细介绍这7种类别的变量。4.2.1 静态变量4.2.1 静态变量静态变量(static variable)是指使用static修饰符声明的变量。静态变量总是在包含了它的那个类型的静态构造函数(第8章)执行之前就存在了,在关联的应用程序域终止时终止。4.2.2 实例变量4.2.2 实例变量实例变量(instance variable)和静态变量相对应。实例变量是指未使用static修饰符声明的变量。实例变量包括两种类型的变量:类的实例变量和结构的实例变量。 1.类的实例变量 2.结构的实例变量4.2.3 局部变量4.2.3 局部变量顾名思义,局部变量(local variable)是在应用程序的某一段时间内存在。局部变量可以声明在块(block)、for语句、switch语句和using语句中,即局部变量是通过“local-variable-declaration”来声明的。4.2.4 值参数4.2.4 值参数对于一个函数成员而言,它都存在一个参数列表(紧跟在函数成员名称之后的小括弧中)。当然,该参数列表可以是空,也可以包含一个或多个参数,多个参数之间使用逗号(,)分隔。 在声明参数时,可以不使用修饰符,也可以使用ref或out修饰符。值参数(value parameter)是指未使用ref或out修饰符声明的参数。4.2.5 ref参数4.2.5 ref参数引用参数(reference parameter)是值使用ref修饰符声明的参数。引用参数和值参数最大的一个区别在于:在函数成员中,函数成员为值参数分配了一个新的存储位置,而引用参数仍然使用其基础变量的存储位置。即引用参数和其基础变量操作了同一个变量,而值参数和其基础变量是操作了两个不同变量,而且不互相影响。4.2.6 out参数4.2.6 out参数输出参数(output parameter)是值使用out修饰符声明的参数。输出参数和值参数最大的一个区别在于:在函数成员中,函数成员为值参数分配了一个新的存储位置;输出参数不创建新的存储位置,而是使用基础变量的存储位置。因此,输出参数的值总是与基础变量相同。 简而言之,基础变量实际上是分配了一个存储位置,在调用包含out参数的函数成员时,该函数成员将在这一个存储位置存储新的值,并修改基础变量的值。4.2.7 数组元素4.2.7 数组元素数组元素是指作为函数成员参数的数组(第8章)的元素,它总是在创建数组实例时开始存在,在没有对该数组实例的引用时停止存在。每个数组元素的初始值都是其数组元素类型的默认值。4.3 变量赋值4.3 变量赋值变量赋值是指给变量指定某一个明确的值,如“int i = 2008;”语句在声明i变量的同时给该变量赋值为2008。在函数成员可执行代码中的给定位置,如果编译器可确定变量已自动初始化或已成为至少一个赋值的目标,则称该变量已明确赋值(definitely assigned)。4.4 实例一:使用值参数传递数据4.4 实例一:使用值参数传递数据【实例4-1】演示了使用值参数传递数据的方法。该功能由static int CountSum(int i,int j)静态函数实现,i和j参数均为值参数。CountSum(int i,int j)函数返回i和j参数的值增1之后的和。4.5 实例二:使用ref参数传递数据4.5 实例二:使用ref参数传递数据【实例4-2】演示了使用ref参数传递数据的方法。该功能由static int RefCountSum(ref int i,ref int j)静态函数实现,i和j参数均为ref参数。RefCountSum(ref int i,ref int j)函数返回i和j参数的值增1之后的和。4.6 实例三:使用out参数返回数据4.6 实例三:使用out参数返回数据【实例4-3】演示了使用out参数传递数据的方法。该功能由static void OutCountSum(int i,int j,out int sum)静态函数实现,i和j参数均为的值参数,sum参数为out参数。OutCountSum(int i,int j,out int sum)函数本身不返回值,但是用sum参数保存i和j参数的值增1之后的和。4.7 变量转换4.7 变量转换转换(conversion)使一种类型的表达式可以被视为另一种类型。变量转换(variable conversion)使一种类型的变量可以被视为另一种类型。转换可以分为隐式转换(implicit conversion)和显式转换(explicit conversion)。如果在转换时,需要添加强制转换的类型,那么该转换为显式转换。本小节将介绍变量转换的知识点。4.7.1 隐式转换4.7.1 隐式转换隐式转换是指不需要添加强制转换的类型的转换。常用的隐式转换包括以下几种。 标识转换,在同一类型内进行转换,它能够使已具有所需类型的实体可被认为是可转换的。 隐式数值转换,如从int类型转换为long类型等。 隐式枚举转换,将数值转换为枚举类型。 隐式引用转换,如引用类型转换为object类型等。 装箱转换,如值类型转换为object类型等。 隐式常量表达式转换,如将int类型转换为uint类型等。 用户定义的隐式转换,包括以下3个步骤:一个标准的隐式转换;执行用户定义的隐式转换运算符;另一个标准的隐式转换。4.7.2 显示转换4.7.2 显示转换显式转换是指需要添加强制转换的类型的转换。常用的显式转换包括以下几种。 显式数值转换,如long类型转换为int类型等。 显式枚举转换,如int类型转换为枚举类型等。 显式引用转换,如object类型转换为引用类型等。 显式接口转换,如object类型转换为接口类型等。 拆箱转换,如object类型转换为值类型等。 用户定义的显式转换, 包括以下3个步骤:一个标准的隐式转换;执行用户定义的显式转换运算符;另一个标准的隐式转换。4.8 小结4.8 小结本章主要介绍了C#语言中的变量的基础知识,如变量概述、变量分类、变量赋值、值参数、ref参数、out参数、变量转换等。其中,读者要着重掌握变量赋值、值参数、ref参数、out参数和变量转换,为后续编写C#程序代码奠定基础。下一章将要介绍C#语言中的表达式和运算符。4.9 习题4.9 习题在Visual Studio 2008集成开发环境中创建名称为“Test_04”的控制台应用程序,并实现以下功能。 (1)将名称为“class1.cs”的文件添加到该应用程序中。 (2)创建一个名称为“ValueF”的方法,且该方法使用值参数value。 (3)创建一个名称为“RefF”的方法,且该方法使用ref参数value。 (4)创建一个名称为“OutF”的方法,且该方法使用out参数value。 第5章 表达式和运算符第5章 表达式和运算符表达式是C#语言组成的重要元素之一,它是可以计算且结果为单个值、对象、方法或命名空间的代码片段。表达式也可以包含文本值、方法调用、运算符及其操作数,或简单名称。简单的说,表达式是一个由操作数和运算符组成的序列。本章将讲解C#语言中的表达式和运算符,主要介绍以下知识点。 表达式分类; this、base和new关键字; 运算符; 运算检查; 运算符重载。5.1 表达式5.1 表达式表达式是一个由操作数(operand)和运算符(operator)构成的序列。运算符指定操作数的运算规则,即指示对表达式中的操作数进行什么样的运算。本节将介绍表达式的知识点。5.1.1 表达式分类5.1.1 表达式分类在C#语言中,可以把表达式分为以下9种类别,如表5.1所示。5.1.2 this关键字5.1.2 this关键字this关键字可以用来引用类的当前实例,还可以用作扩展方法的第一个参数的修饰符。this关键字存在以下3种常用用法。 1.限定名称相同的成员 2.将对象本身作为参数 3.声明索引器5.1.3 base关键字5.1.3 base关键字base关键字用于从派生类中访问基类的成员,主要存在以下2种用法。 调用基类上已被其他方法重写的方法。 指定创建派生类实例时应调用的基类构造函数。 base关键字之后一般跟着“.”标记和一个标识符或一个用方括号括起来的表达式列表。5.1.4 new关键字5.1.4 new关键字new关键字可以作为new运算符、new修饰符或new约束。 1.new运算符 2.new修饰符 3.new约束5.2 运算符5.2 运算符运算符是表达式很重要的一部分,它指示对表达式中的操作数进行什么样的运算,如+、-、*、/、%等。根据运算符所需操作数的个数,可以把运算符分为以下3类。本节介绍运算符的知识点。 一元运算符,只带有一个操作数并使用前缀表示法(如--x)或后缀表示法(如x++),如++、--等运算符。 二元运算符,带有两个操作数并且全都使用中缀表示法(如x+y),如+、-、*、/等运算符。 三元运算符,带有3个操作数并使用中缀表示法,如?: 运算符。5.2.1 运算符优先级5.2.1 运算符优先级算术表达式是最为常见的一种表达式。它由操作数和运算符组成,而且这些运算符之间是存在一定优先级的,如*运算符的优先级就大于+运算符的优先级。C#语言中的运算符一样,也存在优先级。在计算表达式的值时,也必须遵循运算符的优先级的规则。5.2.2 一元运算符5.2.2 一元运算符+、-、!、~、++x、--x和(T)x被称为一元运算符。其中,(T)x运算符为强制转换运算符,它可以将一种类型转换为另外一种类型。+、-和~运算符分别表示一元加运算、一元减运算和按位求补运算。下面详细介绍!、++x、--x和(T)x运算符的使用方法。 1.++运算符 2.--运算符 3.!运算符 4.(T)x运算符5.2.3 算术运算符5.2.3 算术运算符*、/、%、+和–运算符称为算术运算符,它们分别表示乘法、除法、余数、加法和减法运算。语法如下。 left expression operator right expression left expression和right expression分别表示左操作数和右操作数,operator表示运算符,可以为*、/、%、+和–。5.2.4 逻辑运算符5.2.4 逻辑运算符&、^和|运算符称为逻辑运算符。&运算符计算两个操作数的按位逻辑AND,|运算符计算两个操作数的按位逻辑OR,^运算符计算两个操作数的按位逻辑XOR。语法如下。 left expression operator right expression left expression和right expression分别表示左操作数和右操作数,operator表示运算符,可以为&、^和|。5.2.5 条件运算符5.2.5 条件运算符?:运算符称为条件运算符,它是C#语言中唯一的一个三元运算符,语法如下。 条件表达式 ? resulta : resultb; 该表达式首先计算条件表达式的值。如果条件表达式的值为真,则resulta的值,并成为运算结果。否则计算resultb,并成为运算结果。5.2.6 条件逻辑运算符5.2.6 条件逻辑运算符&&和||运算符称为条件逻辑运算符。&&运算符为逻辑与运算符,它计算左右操作数的逻辑与。||运算符为逻辑或运算符,它计算左右操作数的逻辑或。语法如下。 left expression operator right expression left expression和right expression分别表示左操作数和右操作数,operator表示运算符,可以为&&和||。5.2.7 移位运算符5.2.7 移位运算符<<和>>运算符被称为移位运算符。<<运算符表示左移位,>>运算符表示右移位。语法如下: erpression operator count; expression表示被移位的表达式,count表示移动的位数,operator表示运算符,可以为<<和>>。5.2.8 关系和类型测试运算符5.2.8 关系和类型测试运算符==、!=、<、>、<=、>=、is和as运算符称为关系和类型测试运算符。语法如下: left expression operator right expression left expression和right expression分别表示左操作数和右操作数,operator表示运算符,可以为==、!=、<、>、<=、>=、is和as。其中,==、!=、<、>、<=和>=运算符为比较运算符,它们的具体计算方法如下: x == y,如果x等于y,则为true,否则为false。 x != y,如果x不等于y,则为true,否则为false。 x < y,如果x小于y,则为true,否则为false。 x > y,如果x大于y,则为true,否则为false。 x <= y,如果x小于等于y,则为true,否则为false。 x >= y,如果x大于等于y,则为true,否则为false。5.2.9 赋值运算符5.2.9 赋值运算符=、*=、/=、%=、+=、-=、<<=、>>=、&=、^=和|=运算符被称为赋值运算符,它们能够为变量、属性、事件或索引器元素赋新值。语法如下: left expression operator right expression left expression和right expression分别表示左操作数和右操作数,operator表示运算符,如=、*=、/=等。5.3 实例一:使用checked和unchecked运算符检查运算5.3 实例一:使用checked和unchecked运算符检查运算【实例5-1】演示了使用checked和unchecked运算符检查运算的方法。该功能由static void CheckCompute()静态函数实现。5.4 实例二:复数运算符重载5.4 实例二:复数运算符重载在C#语言中,所有一元和二元运算符都具有可自动用于任何表达式的预定义实现。除了预定义运算操作之外,还可通过在类或结构中设置operator声明来引入用户定义的运算操作。这一技术被称为运算符重载。 注意:用户定义的运算符操作的优先级总是高于预定义运算符操作的优先级。 运算符重载可以分为一元运算符重载和二元运算符重载,重载方法如表5.3所示。5.5 小结5.5 小结本章主要介绍了C#语言中的表达式和运算符,如表达式分类、this关键字、base关键字、new关键字、运算符、运算符重载等。其中,读者要着重掌握表达式、运算符和运算符重载,为后续编写C#程序代码奠定基础。下一章将要介绍C#语言中的语句。5.6 习题5.6 习题在Visual Studio 2008集成开发环境中创建名称为“Test_05”的控制台应用程序,并实现以下功能。 (1)将名称为“class1.cs”的文件添加到该应用程序中。 (2)创建一个名称为“Sum”的方法,且在该方法中使用checked和unchecked运算符检查计算两个数的和的运算操作。 第6章 语句第6章 语句和其他编程开发语言(如C、C++等)一样,C#语言也是由各种各样的语句有序构建而成的。语句可以声明局部变量或常量,调用方法,创建对象,将值赋予变量、属性或字段等。一般地,语句以;(分号)终止。本章将讲解C#语言中的各种语句,主要介绍以下知识点。 基本语句; 跳转语句; 选择语句; 迭代语句; 其他语句。6.1 语句概述6.1 语句概述和其他程序开发语言一样,C#语言也提供了多种语句。C#语言的语句可以分为以下3个大类: 标记语句,给语句加上一个标签作为前缀。 声明语句,用来声明局部变量或常量 嵌入语句,能够嵌入到本身语句或其他语句中执行的语句。6.2 基本语句6.2 基本语句C#语言包含多种常用的基本语句,如空语句、标记语句、表达式语句、声明语句、块等。本节将详细介绍创建这些语句的方法。6.2.1 空语句6.2.1 空语句顾名思义,空语句(empty statement)不包括任何实际性语句,它什么都不做。空语句的语法形式如下: ; 当在要求有语句的上下文中不执行任何操作时,使用空语句6.2.2 标记语句6.2.2 标记语句标记语句(labeled statement)可以给语句加上一个标签作为前缀,它可以出现在块(第6.2.5节)中,但是不允许它们作为嵌入语句。标记语句的语法形式如下: identifier : statement; identifier为标签的名称。在同一个块中,不能存在两个同名的标签,否则会产生编译错误。statement表示被标签标记的语句。6.2.3 表达式语句6.2.3 表达式语句表达式语句是C#语言程序代码中最为常见的一种语句,它用来计算所给定表达式的值,而且由该表达式计算的值将被丢弃。实际上,表达式的值只是一个中间结果。表达式语句包括以下7类语句: 赋值表达式,如“i = 2008;”等。 调用表达式,如“Count();”等。 创建对象表达式,如“object o = new object();”等。 前缀递减表达式,如“-- i”等。 前缀递增表达式,如“++ i”等。 后缀递减表达式,如“i --”等。 后缀递增表达式,如“i ++”等。6.2.4 声明语句6.2.4 声明语句声明语句用来声明局部变量或常量,它可以出现在块(第6.2.5节)中,但不允许它们作为嵌入语句使用。声明语句包括声明局部变量语句和声明局部常量语句。声明局部变量语句用来声明一个局部变量。6.2.5 块6.2.5 块块(block)用于编写多条语句,并且可以将整个块看成一个单个语句。块的语法形式如下: { statement-list } statement-list为一个语句列表,它是可选的。如果不存在statement-list,则称该块是空的。语句列表是由一个或多个顺序编写的语句组成。6.3 跳转语句6.3 跳转语句跳转语句(jump statement)用于无条件地转移程序的控制,它包括以下5种跳转语句: break语句,用于退出直接封闭它所在的switch(第6.4.2小节中介绍)、while(第6.5.3小节中介绍)、do(第6.5.4小节中介绍)、for(第6.5.1小节中介绍)或foreach语句(第6.5.2小节中介绍)。 continue语句,用于开始直接封闭它的while、do、for或foreach语句的一次新循环。 return语句,一般用于函数成员的返回操作,即将控制返回到函数成员的调用方。 throw语句,用于产生一个异常。 goto语句,跳转到指定的标签位置。6.3.1 break语句6.3.1 break语句break语句用于退出直接封闭它所在的switch、while、do、for或foreach语句。它的语法形式如下: break; 注意:break语句只能用在switch、while、do、for或foreach语句中,否则发生编译时错误。 如果break语句位于多层嵌套的switch、while、do、for或foreach语句中,break语句只能应用于最里层的语句。6.3.2 continue语句6.3.2 continue语句continue语句用于开始直接封闭它的while、do、for或foreach语句的一次新迭代。它的语法形式如下: continue; 注意:continue语句只能用在while、do、for或foreach语句中,否则发生编译时错误。 如果continue语句位于多层嵌套的while、do、for或foreach语句中,continue语句只能应用于最里层的语句。6.3.3 return语句6.3.3 return语句return语句一般用于函数成员的返回操作,即将控制返回到函数成员的调用方。它的语法形式如下: return expressionopt; expressionopt为返回值的表达式,它是一个可选表达式。return语句存在以下两种形式: 不带expressionopt表达式的return语句,只能用在返回类型为void的函数成员、属性的set访问器(第8章)、事件的add和remove访问器(第8章)、实例构造函数(第8章)、静态构造函数(第8章)或析构函数(第8章)中。 带expressionopt表达式的return语句,只能用在返回类型不是void的函数成员、属性的get访问器(第8章)。expressionopt表达式必须能够隐式转换为其所在函数成员的返回类型。6.3.4 throw语句6.3.4 th
/
本文档为【C#从入门到实践】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索