Loading...

当前位置:资讯中心主页 >ASP编程 >文章内容

  • <展现 C#> 第一章 C#简介(rainbow 翻译)
  • 来源:作者: 发布时间:2007-12-19 18:03:55
    • 域名注册

    • 域名惊喜价格 cn域名1元注册
    • com域名39.9

      虚拟主机

    • 主机按月支付,低至19元/月
    • 超大流量,可开子站点

      VPS主机

    • 特惠VPS168元/月,4-8M独享带宽保证
    • 独立操作系统,无限开站点
    第一章 C# 简介

    欢迎你加入C#的世界! 这一章将把你引进C#的天地,并回答一些相关的问题,如:你为什么要使用C#,C++和C#的主要有
    什么不同点,及为什么C#使研发更容易而且还使你感到非常有趣。
    为什么是另外一种编程语言?
    必须回答的一个问题:当你已使用C++或VB从事企业研发时,为什么还要学习另一种语言? 市场式的回答就是:"在企业
    计算领域,C#将会变成为用于编写"下一代窗口服务"(Next Generation 视窗系统 Services,简写为NGWS )应用程式的主要
    语言。" 这一章将对用参数请求提供支持,并陈列了C#的一些功能。这一章会使你开胃的。
    C#语言自C/C++演变而来。不过,他现代、简单、完全方面向对象和类型安全。如果你是C/C++程式员,学习曲线将会非常平
    坦。许多C#语句直接借用你所喜爱的语言,包括表达式和操作符。如果不仔细看,简直会把他当成C++。
    关于C#最重要的一点:他是现代的编程语言。他简化和现代化了C++在类、名字空间、方法重载和异常处理等领域。屏弃了
    C++的复杂性,使他更易用、更少出错。
    对C#的易用有贡献的是减少了C++的一些特性,不再有宏、模板和多重继承。特别对企业研发者来说,上述功能只会产生更
    多的麻烦而不是效益。
    使编程更方便的新功能是严格的类型安全、版本控制、垃圾收集(garbage collect)等等。所有的这些功能的目标都是瞄准
    了研发面向组件的软件。

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

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


    简单
    C#具有C++所没有的一 个优势就是学习简单。该语言首要的目标就是简单。非常多功能(还不如说是缺少了C++的一些功能)有
    助于C#全方位的简单。
    在C#中,没有C++中流行的指针。默认地,你工作在受管理的代码中,在那里不允许如直接存取内存等不安全的操作。我想
    没有C++程式员能声称,从没有使用指针访问过不属于他们的内存。
    和指针"戏剧性"密切相关的是"愚蠢的"操作。在C++中,有::、.、和->操作符,他们用于名字空间、成员和引用。对于新
    手来说,操作符至今仍是学习的一道难关。C#弃用其他操作符,仅使用单个操作符 "."。目前一个程式员所需要理解的就
    是嵌套名字的注解了。
    你不必记住基于不同处理器架构的隐含的类型,甚至各种整型的变化范围。C#使用统一的类型系统,屏弃了C++多变的类型
    系统。这种系统充许你把各种类型作为一个对象查看,他是个原始类型还是个full-blown 类。和其他编程语言相比,
    由于加框(boxing)和消框(unboxing)的机制,把简单类型当作对象处理并不能获得性能的改善。稍后将周详解释加框和消
    框,但基本上仅当需要时才使用对象访问简单类型这种技术。
    首先,老练的程式员可能不喜欢他,不过整型和布尔型如今终归是两种完全不同的数据类型。这就意味着原来if语句中错
    误的赋值目前会被编译出错,因为if语句只接受布尔类型的值。再也不会出现误用赋值符为比较符这样的错误!
    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 程式员,你的投票不计在内!) ? 大多数情况,仅需从一个类派生
    出。多基类惹出的麻烦通常比他们解决的问题还多。那就是为什么C#仅允许一个基类。如果你觉得需要多重继承,能运
    用接口。
    一个可能出现的问题:在C#中不存在指针,怎么模仿他? 这个问题的答案非常有代表性,他提供了对NGWS运行时事件模式的
    支持。再次,我将把对他的全方面解释放到第五章。

    类型安全
    我再次选指针作为一个例子。在C++中拥有一个指针,你能自由地把他强制转换成为所有类型,包括干出诸如把一个int*
    (整型指针)强制转换成一个double *(双精度指针)这样的傻事。只要内存支持这种操作,他就"干过"。这并不是你所想象
    的企业级编程语言的类型安全。
    纲要性的问题,,C#实施最严格的类型安全,以保护自己及垃圾收集器(garbage collector)。所以必须遵守C#中一些相关
    变量的规则:
    你 不能使用没有初始化的变量。对于对象的成员变量,编译器负责清零。而局部变量,则由你负责清零。当你使用一个没
    有初始化的变量时,编译器会教你怎么做。好处是能够避免由于使用不经初始化的变量计算结果而导致的错误,而你还不
    知道这些奇怪的结果是怎么产生的。
    C#取消了不安全的类型转换。不能把一个整型强制转换成一个引用类型(如对象),而当向下转换时,C#验证这种转换是正
    确的。(也就是说,派生类真的是从向下转换的那个类派生出来的。)
    边界检查是C#的一部分。再也不会出现这种情况:当数组实际只定义了n-1个元素,却超额地使用了n个元素。
    算术运算有可能溢出终值数据类型的范围。C#允许在语句级或应用程式级检测这些运算。在允许检测溢出的情况下,当溢
    出发生时将会抛出一个异常。
    在C#中,被传递的引用参数是类型安全的。

    版本可控(Versionable)
    在过去的几年中,几乎所有的程式员都至少有一次不得不涉及到众所周知的"DLL地狱"。该问题起因于多个应用程式都安装
    了相同DLL名字的不同版本。有时,老版本的应用程式能非常好地和新版本的DLL一起工作,不过更多的时候他们会中断运
    行。目前的版本问题真是令人头痛。
    就象你将在第八章"用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#为你提供了方便的功能,如垃圾收集、类型安全、版本控制,等等。仅有的"代价"就是,代码操作默认是类型安全的,
    不允许指针。光是类型安全就能搞定了。不过,如果你需要指针,仍能通过非安全码使用他们,而且当调用非安全码
    时,不能含有列集。


  • 以上内容由 华夏名网 搜集整理,如转载请注明原文出处,并保留这一部分内容。

      “华夏名网” http://www.sudu.cn 和 http://www.bigwww.com 是成都飞数科技有限公司的网络服务品牌,专业经营虚拟主机,域名注册,VPS,服务器租用业务。公司创建于2002年,经过6年的高速发展,“华夏名网”已经成为我国一家知名的互联网服务提供商,被国外权威机构webhosting.info评价为25大IDC服务商之一。

    华夏名网网址导航: 虚拟主机 双线主机 主机 域名注册 cn域名 域名 服务器租用 酷睿服务器 vps vps主机

  • (阅读次数:154)
  • 上一篇: <展现C#> 第二章 NGWS Runtime 技术基础(rainbow 翻译)    下一篇: <展现C#> 前言(补充) 和第三章 第一个C#程序(rainbow 翻译)
  • [收藏] [推荐] [评论] [打印本页] [返回上一页][关闭窗口]
  • 昵称: (为空则显示guest)
  • 评论分数: ★ ★ ★★★ ★★★★ ★★★★★
  • 评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。