学习C#.NET基础知识(学习重点请下载附件)
C#.NET基础知识
Microsoft .NET 简介
Microsoft .NET 是微软新的因特网战略。
NET 起初被称为 NGWS。NGWS - 下一代视窗服务(Next Generation Windows Services)
在 .NET 被正式发布之前,NGWS 这术语一直被用于微软的某些计划,这些计划旨在创建一个下一代视窗服务的基于因特网的平台("Internet-based platform of Next Generation Windows Services")。
Microsoft. NET 战略在 2000 年 6 月由微软官方正式发布:
l .NET 是微软的新的因特网和 Web 战略
l .NET 不是一个操作系统
l .NET 是一个基于因特网和 WEB 的全新架构
l .NET 将软件作为 Web Services(提交给用户)
l .NET 是用于通用服务(universal services)的一种构架
l .NET 可运行于任何平台上的任何浏览器中
.NET 基于最新的 web 标准
.NET 被构建于以下因特网标准之上:
l HTTP,因特网应用程序之间的通信协议
l XML,用于在因特网应用程序之间交换数据的格式
l SOAP,用于请求 Web Service 的标准格式
l UDDI,用于搜索和发现 Web Service 的标准
.NET 框架(.NET Framework)
FrameWork即架构,它是一个语言开发软件,提供了软件开发的框架,使开发更具工程性、简便性和稳定性。
NET Framework通过COM Interop(COM互操作)技术支持COM+和MTS。一个传统的COM应用程序能够调用一个.NET组件,同时.NET组件(在.NET中称为.NET Assembly)也能够调用一个COM组件。这一非常强大的双向互操作特性使你可以在应用程序中混合使用两类技术。
.NET 框架是为微软新的 .net 平台服务的基础结构。
.NET 框架是用于构建、开发以及运行 Web Service 和 Web 应用程序的公共环境。
.NET 框架包含着公用的类库 - 比如 ADO.NET、ASP.NET 以及 Windows 窗体 - 提供可被整合到多种计算机系统的高级标准服务。
.NET 框架是对语言中立的。目前,它支持 C++、C#、Visual Basic、JScript (JavaScript 的微软版本)以及 COBOL。第三方语言 - 比如 Eiffel、PerlPython、Smalltalk 等等 - 也将可用于构建未来的.NET 框架应用程序。
新的 Visual Studio.NET 是用于新的 .NET 框架的公共开发环境。它提供多功能的应用程序执行环境、简化开发以及多种开发语言之间简易的整合。
其他信息
.NET 计划包含一个新版本的 Windows 操作系统、一个新版本的 Office 以及一系列为开发人员构建基于 web 的应用程序准备的开发软件。
.NET 的背景可以理解为,当计算开始从桌面计算机转向可访问因特网的设备比如掌上电脑和移动电话时,微软公司为了维持其操作系统在市场中的垄断地位而采取的新措施的一个部分。
.NET 框架的最直观的组件是:新的 Internet 信息服务6.0(IIS 6.0)、对支持 ASP.NET 和 ADO.NET 的支持、可构建基于 web 的软件的 Visual Studio.NET 软件工具以及在 SQL Server 2000 数据库中新的 XML 支持。
.NET的优点
l 提供标准的面向对象开发环境,不仅可以在本地与对象交互,还可以通过Web Service和.NET Remoting技术在远程与对象交互。
l 提供优化的代码执行环境,使以前让人们头痛的程序版本问题得到了解决。我们可以在同一台机器中安装相同程序的不同版本。而且deployment也得到了改善,微软说是X-COPY就是说象拷贝文件s一样简单了。
l 提供代码运行安全性。以前我们担心网页中包含的ActivX控件会执行恶意的代码,但现在不用担心了,因为.NET Framework保障执行代码的安全性。
l 使用JIT(Just In Time Activation)技术,提高代码运行速度。
提供标准的框架和强大的开发工具,可以让程序员在实际的开发当中,积累更多的经验。
l .NET遵循业界标准规范,所以可以让代码(.NET里的代码)可以与其他系统交互。
比如Web Service,COM等等。
公共语言运行库
公共语言运行库 (common language runtime,CLR)
托管代码执行核心中的引擎。运行库为托管代码提供各种服务,如跨语言集成、代码访问安全性、对象生存期管理、调试和分析支持。
公共语言运行库的功能通过编译器和工具公开,您可以编写利用此托管执行环境的代码。使用基于公共语言运行库的语言编译器开发的代码称为托管代码;托管代码具有许多优点,例如:跨语言集成、跨语言异常处理、增强的安全性、版本控制和部署支持、简化的组件交互模型、调试和分析服务等。
若要使公共语言运行库能够向托管代码提供服务,语言编译器必须生成一些元数据来描述代码中的类型、成员和引用。元数据与代码一起存储;每个可加载的公共语言运行库可移植执行 (PE) 文件都包含元数据。公共语言运行库使用元数据来完成以下任务:查找和加载类,在内存中安排实例,解析方法调用,生成本机代码,强制安全性,以及设置运行时上下文边界。
公共语言运行库自动处理对象布局并管理对象引用,当不再使用对象时释放它们。按这种方式实现生存期管理的对象称为托管数据。垃圾回收消除了内存泄漏以及其他一些常见的编程错误。如果您编写的代码是托管代码,则可以在 .NET Framework 应用程序中使用托管数据、非托管数据或者同时使用这两种数据。由于语言编译器会提供自己的类型(如基元类型),因此您可能并不总是知道(或需要知道)这些数据是否是托管的。
有了公共语言运行库,就可以很容易地设计出对象能够跨语言交互的组件和应用程序。也就是说,用不同语言编写的对象可以互相通信,并且它们的行为可以紧密集成。例如,可以定义一个类,然后使用不同的语言从原始类派生出另一个类或调用原始类的方法。还可以将一个类的实例传递到用不同的语言编写的另一个类的方法。这种跨语言集成之所以成为可能,是因为基于公共语言运行库的语言编译器和工具使用由公共语言运行库定义的通用类型系统,而且它们遵循公共语言运行库关于定义新类型以及创建、使用、保持和绑定到类型的规则。
所有托管组件都带有生成它们所基于的组件和资源的信息,这些信息构成了元数据的一部分。公共语言运行库使用这些信息确保组件或应用程序具有它需要的所有内容的指定版本,这样就使代码不太可能由于某些未满足的依赖项而发生中断。注册信息和状态数据不再保存在注册表中(因为在注册表中建立和维护这些信息很困难)。取而代之的是,有关您定义的类型(及其依赖项)的信息作为元数据与代码存储在一起,这样大大降低了组件复制和移除任务的复杂性。
语言编译器和工具公开公共语言运行库的功能的方式对于开发人员来说不仅很有用,而且很直观。这意味着,公共语言运行库的某些功能可能在一个环境中比在另一个环境中更突出。您对公共语言运行库的体验取决于所使用的语言编译器或工具。例如,如果您是一位 Visual Basic 开发人员,您可能会注意到:有了公共语言运行库,Visual Basic 语言的面向对象的功能比以前多了。下面是公共语言运行库的一些优点:
性能得到了改进。
能够轻松使用用其他语言开发的组件。
类库提供的可扩展类型。
新的语言功能,如面向对象的编程的继承、接口和重载;允许创建多线程的可缩放应用程序的显式自由线程处理支持;结构化异常处理和自定义属性支持。
如果使用 Microsoft® Visual C++® .NET,则可以使用 C++ 托管扩展来编写托管代码。C++ 托管扩展提供了托管执行环境以及对您所熟悉的强大功能和富于表现力的数据类型的访问等优点。
其他公共语言运行库功能包括:
l 跨语言集成,特别是跨语言继承。
l 垃圾回收,它管理对象生存期,使引用计数变得不再必要。
l 自我描述的对象,它使得使用接口定义语言 (IDL) 不再是必要的。
l 编译一次即可在任何支持公共语言运行库的 CPU 和操作系统上运行的能力。
l 还可以使用 C# 语言编写托管代码。C# 语言提供了下列优点:
l 完全面向对象的设计。
l 非常强的类型安全。
l 很好地融合了 Visual Basic 的简明性和 C++ 的强大功能。
l 垃圾回收。
l 类似于 C 和 C++ 的语法和关键字。
使用委托取代函数指针,从而增强了类型安全和安全性。函数指针通过 unsafe C# 关键字和 C# 编译器 (Csc.exe) 的 /unsafe 选项可用于非托管代码和数据。
CLR的执行模型
1、将源代码(vb、cs)编译成托管代模块。托管代码块由中间语言和元数据组成。
2、将托管代码合并成程序集。
3、加载公共语言运行库。
4、执行程序集的代码。
5、生成本地代码。
.NETFramework类库
.NET Framework 类库 (.NET Framework class library)
SDK (Software Develop Kit)
Microsoft .NET Framework SDK 中包括的类、接口和值类型的符合 CLS 的库。该库提供对系统功能的访问,是建立 .NET Framework 应用程序、组件和控件的基础。
C#2.0新的语法扩充(泛型,迭代器,匿名方法)
匿名方法
C#1.0中给一个委托添加一个方法调用代码如下:
public delegate void MyDelegate(object sender, EventArgs e);
public class TestCase_Delegate
{
private TextBox _TextBox = new TextBox();
//Constractor .ctor
public TestCase_Delegate()
{
//手动绑定click事件
_TextBox.Click = new MyDelegate(OnClick_Click);
}
//处理Click事件
private void OnClick_Click(object sender, EventArgs e)
{
MessageBox.Show("click me!");
}
}
// 来源:www.CSFramework.com, C/S结构框架学习网
哪怕只有这么一条语句也必须得按上面的形式给事件的调用列表添加方法,还得创建一个委托的实例
在C#2.0中引入了匿名方法,大大简化了上述操作,可以改写为:
txt.Click += delegate {Message.Show();}
或是这样:
txt.Click += ctrl_Click也是允许的.
泛型 Generic Types
1、 什么是泛型?
泛型允许你在编译时间实现类型安全。它们允许你创建一个数据结构而不限于特定的数据类型。即通过参数化类型来实现在同一份代码上操作多种数据类型。
泛型编程是一种编程范式,它利用“参数化类型”将类型抽象化,从而实现更为灵活的复用。
之所以我们称它为泛型,是因为我们在定义的时候,只为它所包含的对象指派了一个类型占位符,而不是将它定义为确定的类型,只有在创建该集合的实例时,才会给它指派一个确定的类型。
2、泛型的优点
我们都知道,泛型是.NET2.0里面新引入的特性,至于泛型的作用,我们都知道,它只是使C#里面的类型免去了相互转换的麻烦和复杂度。而且,我们也知道,.NET是一个单根继承系统,即.NET里面所有的类都是单继承的,一个类不能继承多个类,即一个派生类不能继承多个基类,这一点和C,C++是不同的。另外,在C#里面,所有的类型都可以作为Object来进行传递,也就是说,Object类实际上完全可以实现泛型的功能。既然如此,那么Java和.NET为什么还要引入泛型呢?泛型的引入究竟有什么作用呢?
我们来归纳一下,泛型和非泛型相比,主要有二个优点。
首先,泛型更加安全。为什么这么说呢,虽然所有的类型都可以作为Object来传递,但是在传递的过程中无法避免进行类型转换,而类型转换在运行的时候是不安全的,在某个时候,它和程序的环境配置以及具体的数据有关,比如曾经我碰到的一个问题就是,将string类型转换成int型的时候,用int.parse进行转换,结果在本地运行正常,但是上传到服务器的时候却无法显示网页,结果后来用Convert.ToInt32转化就正常了。在C#中,仅整数就有九种类型,它们的范围各不相同,再加上其他类型,如此多的类型,它们相互之间的转换是存在不安全性的因素的,而泛型的使用避免了不必要的类型转换,从而提高了安全性。
比如,我们来看下面这个例子
myStack.Push("ustbwuyi1");
myStack.Push(5);
Array myArray = myStack.ToArray();
foreach (string item in myArray)
{
label1.Text = item "<br/>";
}
// 来源:www.CSFramework.com, C/S结构框架学习网
上述的这个例子,我们在编译该函数的时候,程序是不会报错的,而当程序执行的时候,程序才会抱错,这样的话我们很难在编译的时候发现程序中的错误。那么,如果我们用泛型情况又如何呢?
像上面这种情况在编译的时候就会报错,因为创建该泛型的时候就指定了特定类型string。
扫一扫加作者微信