.net1.0--4.0
.net 1.0 面向对象编程。C#实现
•属性 字段是与类相关的变量。属性是用来封装字段
•事件: 和一些事件相关联的方法的行为.
•委托 :(1)CallBack回调机制 (2)事件处理,一种数据结构,在执行程序时将方法名称作为参数传递,来实现动态调用不同方法.
•方法 :类的行为.
•索引器:使得对象可按照数组相似的方法进行索引.
•构造器:构造函数
•封装:对数据的一种保护,PUBLIC,PRIVATE,GET,SEG来实现.是同一个类之间的关系.
•继承:提供代码的复用性,扩展性,是类与类间的关系.
•多态:子类复写基类的方法实现,同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果
•接口;一种规范,一种契约.
•CLR是.NET跨平台环境
设计模式:研究的是如何合理的去抽象.
•面向对象编程。C#实现对属性、事件、委托、方法、索引器、构造器的全面支持,为面向对象的封装、继承、多态和接口
提供了语言级别的支持。以继承为例,c#支持单实现继承和多接口继承,摒弃了C++中多继承带来的复杂性。
•跨平台运行时支持。CLR是.NET平台下应用程序的通用语言运行时,是C#程序赖以生存的跨平台环境,因此C#具有了
.NET平台语言的所有优势,通用类型系统、自动内存管理、统一异常处理、完全的FCL访问权,都成为C#无与伦比的优势所在。
.net 2.0,泛型 变革之作
C# 2.0是一次完善和补充,也是一次变革与重生。在2.0中引入了诸多的语言特性,完善了1.0基础上的某些不足,
例如匿名方法将代码放在委托而无需创建新的方法;可空类型实现了对值类型的null操作;而部分类将一个类分解到多个类文件中。
这些补充和完善, 总结起来主要包括:
•匿名方法
SomeDelegate someDelegate = new SomeDelegate(someClass.SomeMethod);
MyFunc<string, bool, int> myFunc = SomeMethod;
•可空类型:是一种新的结构类型,被用来处理int类型数据和null. NULLABLE<>
•部分类 :使类的定义横跨多个文件 大型项目时,使一个类分布于多个独立文件中可以让多位程序员同时对该类进行处理(相当于支持并行处理
•迭代器 :迭代器对集合类特别有用,它提供一种简单的方法来迭代复杂的数据结构(循环获取直)
•泛型 :按需实例化参数,把类型作为参数抽象出来,泛型类,泛型参数,泛型方法,泛型支持包括类,结构,接口,委托共四种泛型类型,以及方法成员
其中,泛型支持是C# 2.0的重中之重,.NET框架从CLR级别实现了对泛型的支持,提供专门的ILIST指令支持泛型操作,同时配合C#语言
机制构造一种全新的编程结构,实现了对 类型抽象化 的通用处理方式,这就是算法重用。
.net 3.0,涅槃与重生
C# 3.0是语言发展历史上的里程碑变革,就像凤凰涅槃一般为C#语言注入强大编程体验和活力,简洁、干净、富有意义,这些特性中
主要包括:
•匿名类型 :匿名对象:var book = new { Name = "C#", Price = 100};匿名子段:VAR NAME="JAVA";
•自动属性 :PUBLIC STRING NAME{GET;SET;}
•对象初始化器: 复杂的嵌套,Person person = new Person { FirstName="Scott", LastName="Guthrie", Age=32 };
•集合初始化器:List<Person> people = new List<Person> {
new Person { FirstName = "Scott", LastName = "Guthrie", Age = 32 },
new Person { FirstName = "Bill", LastName = "Gates", Age = 50 },
new Person { FirstName = "Susanne", LastName = "Guthrie", Age = 32 }
};
•隐式类型变量和隐式类型数组 VAR A="JAVA"; VAR[]=NEW []{1,2,3};
•扩展方法 类的扩展方法
1 方法所在的类,方法必须是静态的 public static object GetValueByName1(this object self, string str)
2 方法的第一个参数必须是你要扩展的那个类型,比如你要给int扩展一个方法,那么第一个参数就必须是int。
3 在第一个参数前面还需要有一个this关键字。
•查询表达式 :一个查询表达式以一个from子句开始,以一个select或group子句结束
除此之外,C# 3.0的最大亮点就是LINQ(Language Integrated Query,语言集成查询),在CLR中集成类似于SQL式的数据查询能力,
一种前所未有的 函数式 编程
FORM C IN CUSTOMERS
WHERE C.CITY=="HK"
SELECT C
CUSTOMERS.WHERE(C =>C.CITY=="HK")
.net 4.0 动态编程
•CLR (Common Language Runtime)
•DLR (Dynamic Language Runtime)
•C# and VB .NET
•Web and Networking
•Basic class libraries(BCL)
•Data
•Client
•Web
•Communications
C# 4.0主要引入了以下程序元素:
•动态编程:dynamic drink = GetDrink( nDrinkType );
•并行计算:
ConcurrentQueue<T> 表示线程安全的先进先出 (FIFO) 集合。
ConcurrentStack<T> 表示线程安全的后进先出 (LIFO) 集合
Linq中的并行计算
•后期绑定:
•协变与逆变
•Office Programmability
•Dynamic
•Covariance and Contravariance
•Type Equivalence
要赢得世界,必须在恰当的时间做出恰当的事
•MEF 是托管扩展性框架
•WPF
Windows Presentation Foundation基础,
缩写为WPF,其原来代号为“Avalon”,因“我佩服”拼音首字母组合一样,国内有人调侃地称之为“我佩服”。WPF是微软新一代图形系统,运行 在.NET Framework 3.0架构下,为用户界面、2D/3D 图形、文档和媒体提供了统一的描述和操作方法
XAML作为界面描述语言
•WCF 4.0 Enterprise Library
WCF是一种统一的技术,是微软基于SOA(Service Oriented Architecture,面向服务的架构)所推出的.NET平台下的开发框架。WCF是微软分布式应用程序开发的最新开发框架,它整合了.NET平台下的分布式开发技术,比如.NET Remoting、Web Service和MSMQ等,使开发者可以创建一个跨平台的、安全可信赖,以及事务性的解决方案。
Windows通信基础(Windows Communication Foundation,WCF)是基于Windows平台下开发和部署服务的软件开发包(Software Development Kit,SDK)。WCF为服务提供了运行时环境(Runtime Environment),使得开发者能够将CLR类型公开为服务,又能够以CLR类型的方式使用服务。理论上讲,创建服务并不一定需要WCF,但实际上,使用WCF却可以使得创建服务的任务事半功倍。WCF是微软对一系列产业标准定义的实现,包括服务交互、类型转换、封送(Marshaling)以及各种协议的管理
•WF 4.0
•Appliction Server(代号Dublin)
Windows Presentation Foundation
Windows Communication Foundation
Windows Workflow Foundation
主要研究方向为.NET底层架构和企业级系统应用。架构设计、软件开发和项目管理方面。
.NET基础架构和CLR底层运行机制有浓厚的兴趣,熟悉ASP.NET、XML、WCF、SQL Server相关技术,
对面向对象、设计模式和软件架构,WEB有一定的研究与实践经验。
主要研究方向为:
•对面向对象
•设计模式
•软件架构
•.NET底层架构&CLR底层运行机制
•企业级系统应用,
•WEB
•你必须知道的.NET
.多线程:启动一个线程就是指向一个要执行的方法,START开始.多线程就是执行多个方法.LOCK,TIMER,MITOR
那么线程相关的问题大致有如下四类(这篇文章只讨论单线程、单线程与UI线程这两方面的问题)。
问题一,线程的基本操作,例如:暂停、继续、停止等;
问题二,如何向线程传递参数或者从中得到其返回值;
问题三,如何使线程所占用的CPU不要老是百分之百;
最后一个,也是问题最多的,就是如何在子线程来控制UI中的控件,换句话说,就是在线程中控制窗体某些控件的显示。
对于问题一,我不建议使用Thread类提供的Suspend、Resume以及Abort这三个方法,前两个有问题,好像在VS05已经屏蔽这两个方法;对于Abort来说,除了资源没有得到及时释放外,有时候会出现异常。如何做呢,通过设置开关变量来完成。
对于问题二,我不建议使用静态成员来完成,仅仅为了线程而破坏类的封装有些得不偿失。那如何做呢,通过创建单独的线程类来完成。
对于问题三来说,造成这个原因是由于线程中进行不间断的循环操作,从而使CPU完全被子线程占有。那么处理此类问题,其实很简单,在适当的位置调用Thread.Sleep(20)来释放所占有CPU资源,不要小看这20毫秒的睡眠,它的作用可是巨大的,可以使其他线程得到CPU资源,从而使你的CPU使用效率降下来。
ILDasm.exe 经过使用ILDasm.exe工具查看IL代码发现这个说法并不正确:
实际我们不需要手工来写这个文件,这里推荐Code Snippet Editor这个小工具
FYI:
http://pandahermit.blogbus.com/c2480299/
http://blog.zhaojie.me/2011/03/my-interview-questions-for-dotnet-programmers.html