设为首页
加入收藏
联系我们
首页 基础教程 技术文档 实例分析 数 据 库 疑难杂症 ASP.NET 七夕许愿树 技术论坛
同学网,基于同学关系的真实社区
<%-- 最新动态 Begin --%> <%-- 最新动态 End --%>
最新文章
 C#摄像头编程实例
 C#下用P2P技术实现点…
 Asp.net(c#)数…
 SQL Server数据…
 .NET牛人应该知道些什…
 NET牛人应该知道些什么
 SQL Server S…
 备份指定表到另一数据库
 SQLSERVER中快速…
 ASP.NET中url传…
 ASP.NET自动给UR…
 ASP.NET 2.0防…
 ASP.NET 2.0 …
 如何解决ASP.net中…
 sql server 与…
<%-- 最新动态 Begin --%> <%-- 最新动态 End --%>
推荐文章
 关于C#中的REF和黓认…
 读书笔记c#高级编程 委…
 【算法】C#快速排序类
 Visual C#的SQ…
 C#中调用API
 Infragistics…
 C#接口转换
 C#读取设备信息
 用.net操作word
 C# MessageBo…
 Visual C#中的数…
 雅虎公司C#笔试题,看看…
 C#.NET使用NHib…
 .net学习之运算符重载…
 Visual C# 3.…
<%-- 最新动态 Begin --%> <%-- 最新动态 End --%>
热门文章
 ADO.Net与ADO在…
 开发ASP.NET下的M…
 用C#+XMI技术进行U…
 什么是虚拟机?
 C#基础全接触
 C#学习第一天
 雅虎公司C#笔试题,看看…
 C#语言初级入门(1)
 C#中利用正则表达式实现…
 远程重启计算机(C#)
 用.net操作word
 什么是B/S三层?
 VB和C# 语法对比图 …
 Visual C#常用函…
 Visual C#的SQ…
C#学习第一天
阅读正文 文字大小:增大 减小  文字行距:增大 减小   双击自动滚屏
本文由中国C#技术学习中心整理  如果你对本文有不明之处请到技术论坛讨论!

前言
0.1 提要

欢迎阅读《展现 C#》( Presenting C# ).这本书是你提高企业编程语言的一条捷径.这种企业编程语言带有下一代编程语言服务运行时( NGWS Runtime ):C#( 发音"C sharp" ).

NGWS Runtime 是一个不仅管理执行代码、同时也提供使编程更加容易的动态环境.编译器产生受管代码以指向这种受管理执行环境.你获得跨平台语言集成、跨平台语言异常处理、增强安全性、版本控制、安排支持和查错服务.

支持NGWS Runtime 的主要语言是C#.支持NGWS框架的很多程序是用C#写的,因此,在一些带有NGWS Runtime的编译器中,它的编译器可以被认为是非?闷鸩馐郧沂蔷呕?C#语言借鉴了C++,但是具备现代化和新增的类型安全——使C#成为企业解决方案的首选语言.

0.2 谁应该读这本书

如果你对编程很陌生,这本书不适合你.这本书企图让程序员解脱并使用C#,基于他们已经拥有的知识.《展现 C#》的目标瞄准了已经具有如C/C++、VB、Java或其它编程经验的程序员.

如果你具有C++的背景,转向C#会很容易,但是,如果你精通于其它不同的语言,这本书也会耗掉你的一些日子.如果你有一点COM编程的知识,这本会更有趣,但会COM编程不再是必要的.

0.3 这本书如何组织

第一章 C#简介——这一章把你带到C#逛一回,同时回答了有关你应该考虑学习C#的<A href=http://cs.mimi163.net/cs/question.php>问题</A>.
第二章 NGWS Runtime 的技术基? 樯躈GWS Runtime为运行的C#代码所提供的低层架构.
第三章 第一个C#应用程序——创建真正第一个C#应用程序( 否则它是什么呢? ),它就是一个"Hello World"应用程序.
第四章 C#类型——可以看到用在C#应用程序中的各种类型.探索值型和引用型的区别,还有如何加框和消框.
第五章 类——C#功能真正强大的标志,它是具有类的面向对象的编程.你会学到好多好多的东西,如构造函数、析构函数、方法、属性、索引和事件等.
第六章 控制语句——对应用程序实行流程控制.探索C#提供的各种选择和陈述语句.
第七章 异常处理——获得了编写实现异常处理的应用程序技巧,拥有这种技巧,在NGWS Runtime世界,你是一个好的公民
第八章 用C#写组件——用C#构建组件,因为支持NGWS Runtime,它可以被不同语言平台的客户使用.
第九章 配置和安排——学到如何用C#有条件地进行编译工作,和如何为你的C#<A href=http://cs.mimi163.net/cs/yuanma.php>源码</A>自动地创建文档.另外,这一章将介绍到NGWS的版本技术<A href=http://cs.mimi163.net/cs/question.php>问题</A>.
第十章 用非受管代码交互操作——发现你如何使用C#内部的非受管代码,且非受管代码如何与你的C#组件一起交互操作.
第十一章 C#代码查错——获得使用SDK查错工具的技巧,可以在应用程序中准确地找到错误并修改它们.
第十二章 安全——探索NGWS Runtime的安全概念.学到代码访问安全性和基于角色的安全性.

0.4 使用这本书你需要什么?

从这本书的观点看,你所需要的就是下一代windows服务<A href=http://cs.mimi163.net/cs/soft.php>软件</A>开发包( NGWS SDK ).尽管至少只要有NGWS Runtime 和C#编译器就可以,但当探索这些激动人心的新技术功能 时,在一台机器上装有说明文件档和所有的SDK工具( 包括debugger ),将是一个极好的主意.
这本书不需要你装在机器上的Visual Studio 7的任何工具.我仅建议你要有一个优秀的支持行数的程序编辑器,用以编辑C#源文件.
……
( 省略掉一些有关出版过程和表示感谢的段落 )

0.5 关于作者

Christoph Wille,微软系统工程师( MCSE )、微软系统开发师( MCSD )、Netware网络管理员( CNA )和MCP-IT,作为一个网络咨询人员和程序员,特别精通Windows DNA.微软认为他是ASP方面最有价值的人( MVP ),他是和微软在一起使用早期的C#版本的少数开发者之一.
Christoph 独自或参与了几本书的写作,包括Sams出版社的《自学ADO2.5 21天》、《自学ASP 24小时》、《自学MCSE TCP/IP 14天》和《MCSE 训练指南:SQL Server 7管理》.

第一章 C# 简介  

欢迎您加入C#的世界! 这一章将把您引进C#的天地,并回答一些相关的<A href=http://cs.mimi163.net/cs/question.php>问题</A>,如:您为什么要使用C#,C++和C#的主要有什么不同点,以及为什么C#使开发更容易而且还使您感到很有趣.

为什么是另外一种编程语言?
必须回答的一个<A href=http://cs.mimi163.net/cs/question.php>问题</A>:当您已经使用C++或VB从事企业开发时,为什么还要学习另一种语言? 市场式的回答就是:"在企业计算领域,C#将会变成为用于编写"下一代窗口服务"( Next Generation Windows Services,简写为NGWS)应用程序的主要语言." 这一章将对用参数请求提供支持,并陈列了C#的一些功能.这一章会使您开胃的.

C#语言自C/C++演变而来.但是,它现代、简单、完全面向对象和类型安全.如果您是C/C++程序员,学习曲线将会很平坦.许多C#语句直接借用您所喜爱的语言,包括表达式和操作符.假如不仔细看,简直会把它当成C++.

关于C#最重要的一点:它是现代的编程语言.它简化和现代化了C++在类、名字空间、方法重载和异常处理等领域.屏弃了C++的复杂性,使它更易用、更少出错.

对C#的易用有贡献的是减少了C++的一些特性,不再有宏、模板和多重继承.特别对企业开发者来说,上述功能只会产生更多的麻烦而不是效益.使编程更方便的新功能是严格的类型安全、版本控制、垃圾收集( garbage collect )等等.所有的这些功能的目标都是瞄准了开发面向组件的<A href=http://cs.mimi163.net/cs/soft.php>软件</A>.

在继续呈现出更多的功能之前,我想停下来并在下面说明C#至关重要的各种要素.

简单
现代
面向对象
类型安全
版本控制
兼容
灵活

简单

C#具有C++所没有的一个优势就是学习简单.该语言首要的目标就是简单.很多功能( 还不如说是缺少了C++的一些功能 )有助于C#全方位的简单.

在C#中,没有C++中流行的指针.默认地,您工作在受管理的代码中,在那里不允许如直接存取内存等不安全的操作.我想没有C++程序员可以声称,从没有使用指针访问过不属于他们的内存.

与指针"戏剧性"密切相关的是"愚蠢的"操作.在C++中,有::、.、和->操作符,它们用于名字空间、成员和引用.对于新手来说,操作符至今仍是学习的一道难关.C#弃用其它操作符,仅使用单个操作符 ".".现在一个程序员所需要理解的就是嵌套名字的注解了.

您不必记住基于不同处理器架构的隐含的类型,甚至各种整型的变化范围.C#使用统一的类型系统,屏弃了C++多变的类型系统.这种系统充许您把各种类型作为一个对象查看,它是一个原始类型还是一个full-blown 类.和其它编程语言相比,由于加框( boxing )和消框( unboxing )的机制,把简单类型当作对象处理并不能获得性能的改善.稍后将详细解释加框和消框,但基本上仅当需要时才使用对象访问简单类型这种技术.

首先,老练的程序员可能不喜欢它,但是整型和布尔型如今终归是两种完全不同的数据类型.这就意味着原来if语句中错误的赋值现在会被编译出错,因为if语句只接受布尔类型的值.再也不会出现误用赋值符为比较符这样的错误?ㄊ状窝#,cnbruce就感受到了,“=”and “==”:)

C#同时也解决了存在于C++中已经有些年头的多余东西( redundancies ).这种多余包括常数预定义,不同字符类型等.鉴于多余表单已经从该语言中消失,故一般在C#中都可以使用表单了.

现代

您投入学习C#的努力是一笔大投资,因为C#是为编写NGWS 应用程序的主要语言而设计.您将会发现很多自己用C++可以实现或者很费力实现的功能,在C#中不过是一部分基本的功能而已.

对于企业级的编程语言来说,新增的金融数据类型很受欢迎.您用到了一种新的十进制数据类型,它专用于金融计算方面.如果不喜欢这种现成简单的类型,根据您应用程序的特殊需求,可以很容易地创建出新的一种数据类型.

我已经提到,指针不再是您编程武器的一部分.不要太惊讶,全面的内存管理已经不是您的任务.运行时NGWS提供了一个垃圾收集器,负责C#程序中的内存管理.因内存和应用程序都受到管理,所以很必要增强类型安全,以确保应用的稳定性.

对于C++程序员,异常处理的切不是新的东西,但它是C#的主要功能.C#的异常处理与C++的不同点在于它是交叉语言的( 运行时的另一个功能 ).在没有C#之前,您必须处理怪异的HRESULTs,但现在由于使用了基于异常的健壮的出错处理, 这一切都 结束了

对于现代的应用程序,安全是首要的,C#也不会例外.它提供了元数据语法,用于声明下述NGWS安全模式的能力和许可.元数据是NGWS运行时的一个关键的概念,下一章将涉及到它更深的含义.

面向对象

您不会预料一种新语言不支持面向对象的功能吧? C#当然支持所有关键的面向对象的概念,如封装、继承和多态性.完整的C#类模式构建在NGWS运行时的虚拟对象系统( VOS,Virtual Object System )的上层,VOS将在下章描述.对象模式只是基础的一部分,不再是编程语言的一部分.

您一开始必须关注的事,就是不再有全局函数、变量或者是常量.所有的东西都封装在类中,包括事例成员( 通过类的事例--对象可以访问 )或都静态成员( 通过数据类型 ).这些使C#代码更加易读且有助于减少潜在的命名冲突.

定义类中的方法默认是非虚拟的( 它们不能被派生类改写 ).主要论点是,这样会消除由于偶尔改写方法而导致另外一些原码出错.要改写方法,必须具有显式的虚拟标志. 这种行为不但缩减速了虚拟函数表,而且还确保正确版本的控制.

使用C++编写类,您可以使用访问权限( access modifiers ) 给类成员设置不同的访问等级.C#同样支持private、protected 和public 三种访问权限 ,而且还增加了第四种:internal.有关访问权限 的详细情况将在第五章 "类" 中说明.

您曾经创建了多少个类是从多基类派生出来的( ATL 程序员,您的投票不计在内! ) ? 大多数情况,仅需从一个类派生出.多基类惹出的麻烦通常比它们解决的<A href=http://cs.mimi163.net/cs/question.php>问题</A>还多.那就是为什么C#仅允许一个基类.如果您觉得需要多重继承,可以运用接口.

一个可能出现的<A href=http://cs.mimi163.net/cs/question.php>问题</A>:在C#中不存在指针,如何模仿它? 这个<A href=http://cs.mimi163.net/cs/question.php>问题</A>的答案很有代表性,它提供了对NGWS运行时事件模式的支持.再次,我将把对它的全面解释放到第五章.

类型安全

我再次选指针作为一个例子.在C++中拥有一个指针,您能自由地把它强制转换成为任何类型,包括干出诸如把一个int*( 整型指针 )强制转换成一个double *( 双精度指针 )这样的傻事.只要内存支持这种操作,它就"干过".这并不是您所想象的企业级编程语言的类型安全.

纲要性的<A href=http://cs.mimi163.net/cs/question.php>问题</A>,C#实施最严格的类型安全,以?ぷ约杭袄占? garbage collector ).所以必须遵守C#中一些相关变量的规则:

您不能使用没有初始化的变量.对于对象的成员变量,编译器负责清零.而局部变量,则由您负责清零.当您使用一个没有初始化的变量时,编译器会教您怎么做.优点是能够避免由于使用不经初始化的变量计算结果而导致的错误,而您还不知道这些奇怪的结果是如何产生的.

C#取消了不安全的类型转换.不能把一个整型强制转换成一个引用类型( 如对象 ),而当向下转换时,C#验证这种转换是正确的.( 也就是说,派生类真的是从向下转换的那个类派生出来的. )

边界检查是C#的一部分.再也不会出现这种情况:当数组实际只定义了n-1个元素,却超额地使用了n个元素.

算术运算有可能溢出终值数据类型的范围.C#允许在语句级或应用程序级检测这些运算.在允许检测溢出的情况下,当溢出发生时将会抛出一个异常.

在C#中,被传递的引用参数是类型安全的.

版本可控( Versionable )

在过去的几年中,几乎所有的程序员都至少有一次不得不涉及到众所周知的"DLL地狱".该<A href=http://cs.mimi163.net/cs/question.php>问题</A>起因于多个应用程序都安装了相同DLL名字的不同版本.有时,老版本的应用程序可以很好地和新版本的DLL一起工作,但是更多的时候它们会中断运行.现在的版本<A href=http://cs.mimi163.net/cs/question.php>问题</A>真是令人头痛.

就象您将在第八章"用C#写组件"所看到的,NGWS runtime 将对您所写的应用程序提供版本支持.C#可以最好地支持版本控制.尽管C#不能确保正确的版本控制,但是它可以为程序员保证版本控制成为可能.有这种支持,一个开发人员就可以确保当他的类库升级时,仍保留着对已存在的客户应用程序的二进制兼容.

兼容

C#并没有存在于一个封闭的世界中.它允许使用最先进的NGWS的通用语言规定( Common Language Specification,简写为CLS )访问不同的API.CLS规定了一个标准,用于符合这种标准的语言的内部之间的操作.为了加强CLS的编译,C#编译器检测所有的公共出口编译,并在通不过时列出错误.


当然,您也想能够访问旧一点的COM对象.NGWS运行时提供对COM透明的访问.如何集成原来的代码将在第10章"非管理代码的内部操作"有介绍.

OLE 自动化是一种特殊的动物.任一个使用C++创建OLE自动化项目的人已经喜欢上各种各样的自动化数据类型.有个好消息就是C#支持它们,而没有烦锁的细节.

最后,C#允许您 用C 原型的API进持内部操作.可以从您的应用程序访问任何DLL中的入口点( 有C的原型 ).用于访问原始API的功能称作平台调用服务( Plaform Invocation Services ,缩写PInovke ),第10章将展示使用C API进行内部操作的一些例子.

灵活

上一部分的最后一段有可能提醒了程序员.您可能会问:"难道就没有我要传递指针的API吗?" 您是正确的.不是仅有少数的这种API,而是很多( 有点保守的估计 ).这种对原始WIN32代码的访问有时导致对非安全类指定指针的使用( 尽管它们中的一些由于受COM和PInvoke的支持可以解决 ).

尽管C#代码的缺省状态是类型安全的,但是您可以声明一些类或者仅声明类的的方法是非安全类型的.这样的声明允许您使用指针、结构,静态地分配数组.安全码和非安全码都运行在同一个管理空间,这样暗示着当从安全码调用非安全码时不会陷入列集( marshaling ).

小结

C#语言从C和C++演变而来,它是给那些愿意牺牲C++一点底层功能,以获得更方便和更产品化的企业开发人员而创造的.C#现代、简单、面向对象和类型安全.尽管它借鉴了C和C++的许多东西,但是在一些诸如名字空间、类、方法和异常处理等特定领域,它们之间还存在着巨大的差异.

C#为您提供了方便的功能,如垃圾收集、类型安全、版本控制,等等.仅有的"代价"就是,代码操作默认是类型安全的,不允许指针.光是类型安全就可以搞定了.但是,如果您需要指针,仍可以通过非安全码使用它们,而且当调用非安全码时,不能含有列集

本文由中国C#技术学习中心整理  如果你对本文有不明之处请到技术论坛讨论!

中国C#技术交流QQ群:6337034  10976424  9383681  35248582  35248645
版权所有:中国C#技术学习中心 Copyright ? 2006-2008
建议浏览分辨率使用:1024*768分辨率
粤ICP备05002251号