第1章 .NET面向对象编程基础
【简述】:主要介绍.NET程序运行原理、编程语言的发展趋势等,尤其是语言的发展趋势的讲解,相信对大家编程会有一点启发。
第一节 .NET概述
1、.NET概念
A、.NET Framework 。它是.NET技术的载体。
B、一组根据.NET Framework特性改造过的编程语言和开发工具。
C、与.NET Framework相关、基于.NET Framework或包容.NET技术的多种软件产品。
2、学好.NET技术的关键:学习和掌握面向对象理论和基础技术。
3、.NET的发展历程:
A、2002年,发布.NET Framework 1.0。
B、2005年,发布.NET Framework 2.0,最大的亮点是泛型特性。
C、2006年,发布.NET Framework 3.0。
D、2007年,发布.NET Framework 3.5。最大的亮点是LINQ。
E、2010年,发布.NET Framework 4.0。最大的亮点是Dynamic(动态性)、并行性
4、 .NET Framework 的地位:
|
|
|
5、CLR的简述:
A、CLR全称公共语言运行时(Common Language Runtime),它是.NET Framework的核心与基石,所有在.NET平台上运行的程序都处于CLR的管理之下。
B、从开发.NET应用程序角度,可以将CLR看成一台专用运行.NET应用程序的“虚拟计算机”。
C、CLR的体系结构简单,除了“CPU”之外,只有一个“计算堆栈”和相应的“内存”,为所有.NET应用程序提供运行环境。
D、CLR提供了即时编译、垃圾收集、类型管理、异常捕获等功能。
- E、.NET4.0提供In-Process Side-by-Side Execution(进程内的肩并肩执行)的特性,允许在一个进程内同时启动不同版本的CLR。
第二节 初探.NET程序运行原理
1、介绍.NET几个常用工具。
A、csc.exe 是C#语言编译器,生成独立于特定CPU的IL指令。
B、ildasm.exe 反汇编工具,用于查看IL指令代码,它是深入了解.NET框架的得力工具。
C、Reflector软件,将IL指令反汇编为多种语言形式,如C#。它对于深入把握特定技术领域很有帮助。
D、Dotfuscator Software Services工具,加密程序集,保护作者的知识产权。
2、托管代码:运行于虚拟机之上的代码,它也可调用非托管代码。其原理见图:
|
|
|
|
3、托管代码的执行过程:
A、当运行时,CLR的“类装载器”从外部存储器中将IL指令读入内存。
B、JIT编译器进行安全检查,动态地编译为本地CPU指令代码。此过程仅在第一次调用某个方法时发生。
C、CLR将编译好的代码本地代码缓存起来,第二次调用时直接调用缓存中的本地代码。
第三节 类和对象
1、对象是以类为模板而创建出来的实例。对象与类的实例是是等同的。
2、面向对象的程序在运行时,会创建多个对象,这些对象之间可能有着复杂的关联,它们相互协作,共同完成应用程序所提供的各项功能。
正在运行的面向对象的程序 = 对象 + 对象之间的相互协作关系
3、类是面向对象程序中最基本的复用软件单元,类中可包含多个方法。
4、外界通过对象变量来调用类中的实例方法。
5、创建完类的对象并斌值给相同的类型的变量之后,可以通过此变量调用对象的实例方法,存取对象的字段(或属性)。
6、声明为public 的方法可以被外界调用。
第四节 了解编程的发展趋势
1、现代编程的三大特性:声明性、动态性、并发性。
2、声明式编程风格:告诉计算机“要干什么”,而非怎么干?LINQ就是典型实例。
Static void GroupStudentByCityUseLINQ()
{
Var results = from student in GetStudents() //指定要处理的数据
Group student by student.City into grp //这些数据需要分组
Select ProcessGroup(grp) //对于每个分组进行进行一些加工
PrintResult(results); //输出结果
}
【感想】:我以往的编程方法为面向过程的,编写的程序大多较长,这里介绍的声明式的编程风格对我触动很大,相信在我的程序中一定会向这方面发展,比如大量使用LINQ等。
3、动态性:
A、概念:就是将一些原本在编译时完成的工作(比如进行类型识别、生成方法调用指令等)推迟到程序运行时才进行。
B、NET4.0引入一个动态语言运行时(Dynamic Language Runtime)即DLR,在CLR之上提供一个动态语言的运行环境,从而允许Ruby等动态语言在.NET平台上运行,同时像C#、VB.NET等静态语言有了动态特性。
C、动态编程的优点:灵活,开发效率较高。
D、案例:
dynamic d = 1;
dynamic result = d.DoSomething();
Console.WriteLine(result)
[解释]:变量d保存的是一个整数,默认情况下不可能有一个DoSomething方法,然而,上述代码却可以顺利通过编译,直到运行是才报告引发了一个RuntimeBinderException异常。
E、应用场景之一:使用dynamic关键字简化与COM组件交互。
4、并行性:.NET4.0引入了并行扩展,为所有.NET语言提供了一个开发并行程序的平台。在编程语言层面,主要体现将LINQ增强为支持并行功能的并行LINQ。
var results = from student in GetStudents().AsParallel()
group student by student.City into grp
select ProcessGroup(grp);
另外,函数式语言F#,天生就是开发并行程序的。在对海量数据处理领域大有用武之地。
【感想】:并行性的开发,在当今CPU的多核的时代显得十分重要,尤其是运行在服务器端的程序更是如此。在此方面的投入完全是值得的。