基于 C# 的 .NET Framework 程序设计
description
Transcript of 基于 C# 的 .NET Framework 程序设计
基于 C# 的 .NET Framework 程序设计 第 1 章 Microsoft .NET
Framework 概述 第 2 章 托管执行环境的介绍 第 3 章 使用组件 第 4 章 部署与版本控制 第 5 章 通用类型系统 第 6 章 类型的使用 第 7 章 字符串、数组和集合 第 8 章 委托和事件 第 9 章 内存和资源管理
第 10 章 数据流和文件 第 11 章 Internet 访问 第 12 章 序列化 第 13 章 远程处理和 XML Web
Service 第 14 章 线程和异步编程 第 15 章 托管代码与非托管代码之间的互操作 第 16 章 使用 Microsoft
ADO.NET 访问数据 第 17 章 属性
第 2 章 托管执行环境介绍 编写 .NET 应用程序 编译和运行 .NET 应用程序
编写 .NET 应用程序2.1 编写 .NET 应用程序
使用命名空间 定义命名空间和类 入口点、作用范围和声明 控制台输入和输出 区分大小写
使用命名空间 类可以全路径引用
或者引用命名空间 不需要全部限定包含该类的名称
// 声明 FileStream 对象System.IO.FileStream aFileStream;
using System.IO;
...
FileStream aFileStream;
2.1.1 使用命名空间
定义命名空间和类 C# 支持自定义命名空间和在这些命名空间下的类
所有的类都要定义在某个命名空间下 如果没有明确提供命名空间 , 类就添加到一个没有名称的全局命名空间中 命名空间可以嵌套
namespace CompCS {
public class StringComponent {
}
}
2.1.2 定义命名空间和类
入口点、作用范围和声明 在 C# 中,应用程序入口点是一个类的公有的
main() 函数
入口点函数可以带 string 数组类型的参数
2.1.3 入口点、作用范围和声明
class MainApp { public static void Main() {. . .}}
class MainApp { public static void Main(string[] agrs) {
if(agrs.Length>0). . .
}}
入口点、作用范围和声明(续) C# 支持以点号作为范围解析符
在 C# 中,在用一个变量之前一定先声明它
2.1.3 入口点、作用范围和声明
Console.WriteLine ("First String");
Lib.Comp myComp = new Lib.Comp();
控制台输入和输出 控制台输入方法
Read , ReadLine()
控制台输出方法 Write , WriteLine()
Console.WriteLine(“Hello World”);
String s = Console.ReadLine() ;
2.1.4 控制台输入和输出
区分大小写 不要用需要区分大小写的名字
保证区分大小写和不区分大小写的语言都可充分调用组件 在单一名称范围,不要用大小写来区分标识符
应避免下列用法class customer {...}class Customer {...} void foo(int X, int x)
2.1.5 区分大小写
第 2 章 托管执行环境介绍
编写 .NET 应用程序 编译和运行 .NET 应用程序
编译和运行 .NET Framework 应用程序 编译器选项 托管执行的过程 元数据 Microsoft 中间语言
(MSIL) 程序集
2.2 编译和运行 .NET Framework 应用程序 公共语言运行库工具 实时 (JIT, Just-In-
Time) 编译 应用程序域 垃圾回收
编译器选项 直接从命令行窗口中编译
用 /target 或 /t 指定编译目标
用 /reference 或 /r 来引用程序集
2.2.1 编译器选项
>csc HelloDemoCS.cs
csc /t:exe HelloDemoCS.cs
>csc /t:exe /r:assemb1.dll HelloDemoVB.vb
托管执行的过程
类装载器类装载器
JIT JIT 编译器编译器
执行安全检查
EXE/DLL(MSIL 和元数据 )
类库(MSIL 和元数据 )
可信任的预编译JIT 代码
调用未编译方法
运行时引擎
托管本地代码
编译器 源代码
2.2.2 托管执行的过程
元数据 元数据是在编译时嵌入的声明性信息
应用程序版本、区域、公钥信息 类型成员(方法、字段、属性、事件、嵌套的类型) 安全许可证信息 该程序集所依赖的其他程序集
包括所有 .NET Framework 文件和资源文件如文本( txt 、 xml )、声音图像等资源文件
2.2.3 元数据
元数据的作用 加载和定位类 增强代码安全性 解析方法调用 提供反射支持 可利用特性扩展元数据
2.2.3 元数据元数据(续)
Microsoft 中间语言( MSIL ) 可被任何支持中间语言的编译器产生
任何兼容公共类型系统 (CTS) 的编译器(如:cobol 、 perl 、 pascal 、 smarttalk… )都可以产生中间语言代码
可被公共语言运行库 JIT 编译器转变成本地代码在可以执行代码前,必须将 MSIL 转换为 CPU 特定的本地代码,这通常是通过实时 (JIT) 编译完成的
2.2.4 Microsoft 中间语言 (MSIL)
程序集
程序集
清单多 个 托 管 模 块和 资 源 文 件 被编 译 到 一 个 程序 集
托管模块( MSIL 和元数据)
托管模块( MSIL 和元数据)
.html
.gif
资源文件
2.2.5 程序集
公共语言运行库工具 和 MSIL 一起工作的运行时实用工具
MSIL 编译器 (ilasm.exe)
从 Microsoft 中间语言 (MSIL) 生成最终可执行二进制代码。 MSIL 反编译器 (ildasm.exe)
检查元数据和托管二进制代码,利用包含 MSI 代码的 PE 文件,创建适合输入到 MSI 汇编程序 (Ilasm.exe) 的文本文件。
强名称工具 (sn.exe)
帮助创建带强名称的程序集。 sn.exe 提供用于密钥管理、签名生成和签名验证的选项。
2.2.6 公共语言运行库工具
实时 (JIT, Just-In-Time) 编译 JIT 编译器提供针对特定 CPU 的优化
由于公共语言运行库为每种受支持的 CPU 结构都提供了 JIT 编译器,开发人员可以编写一组可在不同结构的计算机上进行 JIT 编译和执行的 MSIL 。
代码执行过程 MSIL 按需生成本地代码 为后面的调用保存已编译的本地代码
2.2.7 实时 (JIT, Just-In-Time) 编译
应用程序域 过去进程边界用来隔离应用程序 在 CLR 中, 应用程序域提供应用程序之间的隔离
以极小的性能损失进行代码类型安全检查来隔离应用程序 多个应用程序域可并存于同一个应用程序中 能够在不停止整个进程的情况下停止单个应用程序 在一个应用程序中运行的代码不能直接访问其他应用程序中的代码或资源
在一个应用程序中的错误不会影响其他的应用程序
2.2.8 应用程序域
多媒体演示 应用程序加载和单文件程序集执行
垃圾回收 垃圾回收在 .NET Framework 中自动进行对象内存管理
垃圾回收优化引擎根据正在进行的分配情况确定执行回收的最佳时间。当垃圾回收执行回收过程时,它检查托管堆中不再被应用程序使用的对象来回收它们占用的内存。 不再需要手动进行对象内存的跟踪和管理
对象内存的跟踪和销毁都通过垃圾回收引擎来适当地自动进行
2.2.9 垃圾回收
回顾
学习完本章后,将能够: 编写 .NET 应用程序 编译和运行 .NET 应用程序
实验 生成一个简单的 .NET 应用程序
15 分钟
练习 1 用 C# 创建程序练习 2 使用 MSIL反汇编程序