1、C#概览
C#版本 | .NET 版本 | Visual Studio 版本 | 特性描述 |
C# 1.0/1.2 |
.NET Framework1.0/1.1 | Visual Studio 2002/2003 |
C#第一个正式发行版,专为.NET编程提供支持
|
C# 2.0 | .NET Framework 2.0 | Visual Studio 2005 |
C#语言开始支持泛型,.NET Framework 2.0新增了支持泛型的类库
|
C# 2.0 | .NET Framework 3.0 | Visual Studio 2005 |
.NET Framework 3.0新增了支持分布式通信框架WCF,富客户端框架WPF,
工作流WF以及基于Web身份验证(Cardspaces)
|
C# 3.0 | .NET Framework 3.5 | Visual Studio 2008 |
增加了对LINQ的支持,对于集合编程API进行了大幅改进,.NET Framework 3.5对原有类库进行了扩展,从而支持
|
C# 4.0 | .NET Framework 4.0 | Visual Studio 2010 |
添加了动态类型(dynamic)的支持,对用于多线程的API进行了大幅改进。强调了多处理和多核心支持
|
C# 5.0 | .NET Framework 4.5 | Visual Studio 2012 |
主要对异步编程进行了增强(async和await)
|
2、.NET Framework
.NET Framework分为:
- 公共语言运行时(CLR)
- .NET Framework基类库(FCL)
公共语言运行时(CLR)包含:
- 公共类型系统(CTS)
- 公共语言规范(CLS)
托管代码(managed code):指由"运行时"控制程序的主要行为,管理诸如内存分配、安全性和JIT编译等方面。
C#作为一门托管语言,和C/C++这些本地语言不同;C/C++经过编译后直接变成处理器可执行的机器码,而C#编译器则会将C#转换为CIL(简称IL)代码,而不是机器码,我们知道C#是基于.NET Framework 框架的语言,CIL代码转换为可执行的代码还需要经过CLR的转换,CLR根据需要编译CIL代码,这个过程称为JIT编译(Just-in-time)或即时编译。下面是C#代码编译到执行的过程:
3、C# 代码执行过程
学习一种语言最开的方式就是开始动手写程序,我们先从一个最简单的Hello world开始:
这里我们需要注意,一旦程序终止,编译好的代码也会被丢弃。如果再次运行应用程序,JIT编译器将会再次将IL编译成本地代码。
4、C#命名空间
要点:
- 命名空间内的类型称为命名空间的成员
- 一个源文件可以包含多个命名空间的声明
- 引入命名空间的语法:using 命名空间名称
C#中常用命名空间:
命名空间 | 说明 |
System | 包含基本类,这些类定义常用的值类型和引用数据类型、事件和事件处理程序、接口、属性和异常处理。 |
System.Data | 提供对表示ADO.NET结构的类的访问。 |
System.IO | 用于操作文件的类。 |
System.Text | 包含表示ASCII、Unicode、UIF-7和UIF-8字符编码的类。 |
System.Collections | 包含接口和类,这些接口和类定义各种对象(如列表、队列、位数组、哈希表和字典)的集合。 |
System.Threading | 提供一些使得可以进行多线程编程的类和接口。 |
System.Net | 为当前网络上使用的多种协议提供了简单的编程接口。 |
命名空间声明语法:
namespace 命名空间的名字
{
//定义类
}
5、异常处理
程序中的错误:
- 语法错误
- 运行时错误
- 逻辑错误
c#中的异常:
c#中的所有异常都派生自Exception
System. Exception的常用属性:
属性 |
说明 |
Message | 描述错误情况的文本 |
Source | 导致异常的应用程序或对象名 |
StackTrace | 堆栈上方法调用信息,它用助于跟踪抛出异常的方法 |
C#程序中经常使用的异常类:
1、常见的异常类
(1)SystemException类:该类表示.net平台引发的异常,被称为系统异常,通常无法修复。
(2)ApplicationException类:该类表示应用程序发生非致命错误时所引发的异常。
2、与参数有关的异常类
(1)ArgumentException类:该类用于处理参数无效的异常。
(2)FormatException类:该类用于处理参数格式错误的异常。
3、数组有关的异常
(1)IndexOutOfException类:该类用于处理下标超出看数组长度所引发的异常。
(2)ArrayTypeMismatchException类:该类用于处理在数组中存储数据类型不正确的元素所引发的异常。
(3)RankException类:该类用于处理维数错误所引发的异常。
4、与算术有关的异常
(1)ArithmeticException类:该类用于处理与算术有关的异常。
(2)DivideByZeroException类:表示试图除以零而引发的异常。
C#中使用try...catch...捕获并处理异常,finally中的代码在catch中的代码执行后执行。
具体语法如下:
try
{
//可能引发异常的程序代码
}
catch(Exception e)
{
//处理异常的代码
}
finally
{
//最终执行代码(不管代码如何控制,都会执行finally块中的代码)
}
编码规范:
- 请勿将try...catch块用于流程控制。
- 不得声明空的catch块。
- 避免在catch块中嵌套try...catch。
C#中可以使用throw语句引发异常。
使用关键字new
如:throw new 异常类(表达式、字符串);