C#专题之C#简介

来源:互联网 发布:zepto.js 中文手册 编辑:程序博客网 时间:2024/05/17 02:00
思多雅[天行健] 发布时间:2008.09.15 

    C#是一门简单、现代、面向对象和类型安全的编程语言,由C和C++发展而来。 

    在C#之前,C和C++已经成为在软件的开发领域中使用最广泛的语言。它们为程序员提供了十分灵活的操作,但也因此牺牲了一定的效率及相应的易用性,比如与Microsoft Visual Basic等语言相比,同等级别的C/C++应用程序往往需要更长时间来开发。也正由于C/C++语言的复杂性,C++也只有专业的程序员才能掌握,而对于一般用户而言,C++确实有些沉重。对于信息化社会的今天而言,单纯的软件开发甚为少见,但更多的注重于实际应用,许多程序员都试图寻找一种新的语言,希望能在功能与效率之间找到一个更为理想的权衡点。
  对于某些有些语言来说,也许以牺牲灵活性的代价来提高效率是可以接受,但是这些灵活性正是C/C++程序员所需要的,另外这些解决方案对编程人员的限制过多(如屏蔽一些底层代码控制的机制),其所提供的功能难以令人满意。这些语言无法方便地同早先的系统交互,也无法很好地和当前的网络编程相结合。
  对于C/C++用户来说,最理想的解决方案无疑是在快速开发的同时又可以调用底层平台的所有功能。他们想要一种和最新的网络标准保持同步并且能和已有的应用程序良好整合的环境。另外,一些C/C++开发人员还需要在必要的时候进行一些底层的编程。
  C# (C sharp) 是微软对这一问题的解决方案。C#是一种最新的、面向对象的编程语言。它使得程序员可以快速地编写各种基于Microsoft .NET平台的应用程序,Microsoft .NET提供了一系列的工具和服务来最大程度地开发利用计算与通讯领域。
  正是由于C#面向对象的设计,使它成为构建各类组件的理想之选--无论是高级的商业对象还是系统级的应用程序。使用简单的C#语言结构,这些组件可以方便的转化为XML 网络服务,从而使它们可以由任何语言在任何操作系统上通过Internet进行调用。
最重要的是,C#使得C++程序员可以高效的开发程序,而绝不损失C/C++原有的强大的功能。因为这种继承关系,C#与C/C++具有极大的相似性,熟悉类似语言的开发者可以很快的转向C#。或者这么说生产信息化的今天,也就产生了C#。

-------思多雅[天行健]版权所有,首发太平洋论论坛,转载请注明-------
C#的特点:
1、C#的效率与安全性
    网络传播的简单性、快速性使然,开发者必须不断缩短开发周期,不断推出应用程序的新版本,而不仅仅是开发一个"标志性"的版本。
   消除大量程序错误  
  即使是专家级的C++程序员也常会犯一些最简单的小错误--比如忘了初始化变量,但往往就是这些小错误带来了难以预料的问题,有些甚至需要很长时间来寻找和解决。一旦一个程序作为产品来使用,就算最简单的错误纠正起来也可能要付出极其昂贵的代价。
  C#的现代化设计能够消除很多常见的C++编程错误。 例如:
   1. 资源回收减轻了程序员内存管理的负担。
   2. C#中变量由环境自动初始化。
   3. 变量是类型安全的。
这样,程序员编写与维护那些解决复杂商业问题的程序就更方便了。
  它使开发者用更少的代码做更多的事,同时也不易出错。

2、C#对现有的网络编程新标准的支持
  新的应用程序开发模型意味着越来越多地解决方案依赖于新出现的网络标准,例如HTML,XML,SOA等。现存的开发工具往往都是早于Internet出现的,或者是在我们所熟知的网络还处于孕育期时出现的,所以,它们一般无法很好地支持最新的网络技术。
    XML网络服务框架可以使现有的XML网络服务对程序员来说就和C#对象一样。这样,程序员就可以方便地使用他们已有的面向对象的编程技巧来开发利用现有的XML网络服务。XML正逐渐成为在网络上传输结构化数据的标准。这种数据集合往往非常小。为提高性能,C#允许把XML数据直接映射到struct数据类型,而不是class。这样对处理少量的数据非常有效。
    C#程序员可以在Microsoft .NET平台上事半功倍的构建应用程序的扩展框架。C#包含了内置的特性,使任何组件可以轻松转化为XML网络服务,通过Internet被任何操作系统上运行的任何程序调用。
    C#语言允许类型定义的,扩展的元数据。这些元数据可以应用于任何对象。项目构建者可以定义领域特有的属性并把他们应用于任何语言元素-类,接口等等。然后,开发人员可以编程检查每个元素的属性。这样,很多工作都变得方便多了,比如编写一个小工具来自动检查每个类或接口是否被正确定义为某个抽象商业对象的一部分,或者只是创建一份基于对象的领域特有属性的报表。定制的元数据和程序代码之间的紧密对应有助于加强程序的预期行为和实际实现的之间的对应关系。

3、C#的扩展交互性
    作为一种自动管理的,类型安全的环境,C#适合于大多数企业应用程序。但实际的经验表明有些应用程序仍然需要一些底层的代码,要么是因为基于性能的考虑,要么是因为要与现有的应用程序接口兼容。这些情况可能会迫使开发者使用C++, 即使他们本身宁愿使用更高效的开发环境。
    C#采用以下对策来解决这一问题:
  1. 内置对组建对象模型(COM)和基于Windows?的API的支持;
  2.允许有限制地使用纯指针(Native Pointer)。
  在C#中,每个对象都自动生成为一个COM对象。开发者不再需要显式的实现IUnknown和其他COM接口.这些功能都是内置的.类似的,C#可以调用现有的COM对象,无论它是由什么语言编写的。
  C#包含了一个特殊的功能,使程序可以调用任何纯API。在一段特别标记的代码中,开发者可以使用指针和传统C/C++特性,如手工的内存管理和指针运算。这是其相对于其它环境的极大优势。这意味着C#程序员可以在原有的C/C++代码的基础上编写程序,而不是彻底放弃那些代码。
  无论是支持COM还是纯API的调用,都是为了使开发者在C#环境中直接拥有必要的强大功能。

4、C#对对版本的更新的支持
  更新软件组件是一项很容易出错的工作,因为代码的修改可能无意间改变原有程序的语义。为协助开发者进行这项工作,C#为版本的更新提供内在的支持。例如,方法重载必须显式声明。这样可以防止编码错误,保证版本更新的灵活性。还有一个相关的特性就是对接口和接口继承的内在支持。这些特性使得C#可以开发复杂的框架并且随着时间不断发展更新它。
  总体来说,这些特性使得开发程序项目的后续版本的过程更加健壮,从而减少后续版本的开发成本。

小结:
  C#是一种现代的面向对象语言。它使程序员快速便捷地创建基于Microsoft .NET平台的解决方案。这种框架使C#组件可以方便地转化为XML网络服务,从而使任何平台的应用程序都可以通过Internet调用它。
  C#增强了开发者的效率,同时也致力于消除编程中可能导致严重结果的错误。C#使C/C++程序员可以快速进行网络开发,同时也保持了开发者所需要的强大性和灵活性。
 
-------思多雅[天行健]版权所有,首发太平洋论论坛,转载请注明-------

C#的运行环境
    C#的发布,是作为Microsoft Visual Studio[简称为VS] 2003的一部分提供给用户,除了C#以外,VS还支持Visual Basic、Visual C++和描述语言VBScript和Jscript。所有这些语言都提供对.net平台的访问能力,它包括一个通用的执行引擎和一个丰富的类库。.net平台定义了一个“通用语言子集”[CLS],这是一种混合语言,它可以增强CLS兼容语言和类库间的无缝协同工作能力,这对于C#的开发者来说,意昧着C#既是一种新的语言,又可以对原有的工具如VB和VC++使用的丰富类库进行完全访问,但同时也注意到一点,C#本身并没有包含一个类库。
    同样,VS2005的发布,对C#的支持更加完善,及进行了更新,我们后面的教程,也将基本VS2005进行。

-------思多雅[天行健]版权所有,首发太平洋论论坛,转载请注明-------

补充知识:
    面向结构化的程序和面向对象化的程序
    结构化程序的概念首先是从以往编程过程中无限制地使用转移语句而提出的。转移语句可以使程序的控制流程强制性的转向程序的任一处,在传统流程图中,就是用上节我们提到的"很随意"的流程线来描述这种转移功能。如果一个程序中多处出现这种转移情况,将会导致程序流程无序可寻,程序结构杂乱无章,这样的程序是令人难以理解和接受的,并且容易出错。尤其是在实际软件产品的开发中,更多的追求软件的可读性和可修改性,象这种结构和风格的程序是不允许出现的。比如:C,FORTRAN,PASCAL等等    结构化程序设计方法主要由以下三种逻辑结构组成:1)顺序结构:顺序结构是一种线性、有序的结构,它依次执行各语句模块。2)循环结构:循环结构是重复执行一个或几个模块,直到满足某一条件为止。3)选择结构:选择结构是根据条件成立与否选择程序执行的通路。采用结构化程序设计方法,程序结构清晰,易于阅读、测试、排错和修改。由于每个模块执行单一功能,模块间联系较少,使程序编制比过去更简单,程序更可靠,而且增加了可维护性,每个模块可以独立编制、测试。    面向对象程序语言中支持的对象具有三个明显得特征:封装、继承、多态;而Javascript在类别和副本上并没有明显地分界。事实上,Javascript语言中所有的变量数据类型在JS中都是对象。JS总共支持4种对象:内置对象、自定义对象、浏览器程序对象和ActiveX对象。 return this只是返回该对象,以便别处引用,但并不是多出一个对象。所以,面向过程的程序设计中:
    程序=算法+数据结构    数据结构和算法相分离的,所以,系统庞大后,它的控制、移植、重用就成了问题。
    而在面向对象的程序设计中:
    对象=数据结构+算法
    程序=对象+对象+.....
克服了面向过程的设计中存在的问题。