1.2 C#的含义
如上所述,C#是可用于创建要运行在.NET CLR上的应用程序的语言之一,它从C和C++语言演化而来,是Microsoft专门为使用.NET平台而创建的。C#吸取了以往语言失败的教训,考虑了其他语言的许多优点,并解决了它们存在的问题。
使用C#开发应用程序比使用C++简单,因为其语法更简单。但是,C#是一种强大的语言,在C++中能完成的任务几乎都能利用C#完成。虽然如此,C#中与C++高级功能等价的功能(例如直接访问和处理系统内存),只能在标记为“unsafe”的代码中使用。顾名思义,这个高级编程技术存在潜在威胁,因为它可能覆盖系统中重要的内存块,导致严重后果。因此,本书不讨论这个问题。
C#代码常比C++略长一些。这是因为C#是一种类型安全的语言(与C++不同)。在外行人看来,这表示一旦为某个数据指定了类型,就不能转换为另一个不相关的类型。所以,在类型之间转换时,必须遵守严格的规则。执行相同的任务时,用C#编写的代码通常比用C++编写的代码长。但C#代码更健壮,调试起来也比较简单,.NET始终可以随时跟踪数据的类型。在C#中,不能完成诸如“把4字节的内存分配给这个数据后,我们使其有10个字节长,并把它解释为X”等任务,但这并不是一件坏事。
C#只是用于.NET开发的一种语言,但它是最好的一种语言。C#的优点是,它是唯一彻头彻尾为.NET Framework设计的语言,是在移植到其他操作系统上的.NET版本中使用的主要语言。要使诸如VB.NET的语言尽可能类似于其以前的语言,且仍遵循CLR,就不能完全支持.NET代码库的某些功能,至少需要不常见的语法。
但C#能使用.NET Framework代码库提供的每种功能。而且,.NET的每个新版本都在C#语言中添加了新功能,满足了开发人员的要求,使之更强大。
1.2.1 用C#能编写什么样的应用程序
如前所述,.NET Framework没有限制应用程序的类型。C#使用的是.NET Framework,所以也没有限制应用程序的类型。这里仅讨论几种常见的应用程序类型。
● 桌面应用程序 这些应用程序(如Microsoft Office)具有我们很熟悉的Windows外观和操作方式,使用.NET Framework的Windows Presentation Foundation(WPF)模块就可以简便地生成这种应用程序。WPF模块是一个控件库,其中的控件(例如按钮、工具栏和菜单等)可用于建立Windows用户界面(UI)。
● Windows Store应用程序 这是Windows 8引入的一类新的应用程序。此类应用程序主要针对触摸设备设计,通常全屏运行,侧重点在于简洁清晰。创建这类应用程序的方式有多种,包括使用WPF。
● 云/Web应用程序 .NET Framework包括一个动态生成Web内容的强大系统—— ASP.NET,允许进行个性化和实现安全性等。另外,这些应用程序可以在云中驻留和访问,例如Microsoft Azure平台。
● Web API 这是建立REST风格的HTTP服务的理想框架,支持许多客户端,包括移动设备和浏览器。
● WCF服务 这是一种灵活创建各种分布式应用程序的方式。使用WCF服务可以通过局域网或Internet交换几乎各种数据。无论使用什么语言创建WCF服务,也无论WCF服务驻留在什么系统上,都使用一样简单的语法。
这些类型的应用程序也可能需要某种形式的数据库访问,这可以通过.NET Framework的Active Data Objects .NET(ADO.NET)部分、ADO.NET Entity Framework或C#的LINQ(Language Integrated Query)功能来实现。也可以使用许多其他资源,例如,创建联网组件、输出图形、执行复杂数学任务的工具。
1.2.2 本书中的C#
本书第Ⅰ部分介绍C# 语言的语法和用法,但不过分强调.NET Framework。这是必需的,因为我们不能没有一点儿C# 编程基础就使用.NET Framework。首先介绍一些比较简单的内容,把较复杂的面向对象编程(Object-Oriented Programming, OOP)主题放在基础知识的后面论述。假定读者没有一点儿编程的知识,这些是首要原则。
学习了基础知识后,本书还将介绍如何开发更复杂、更有用的应用程序。本书第Ⅱ部分将研究基于云的Web应用程序编程,第Ⅲ部分将讲述数据访问(对ORM数据库、文件系统和XML数据的访问)和LINQ,第Ⅳ部分将详细讨论桌面和Windows Store应用程序编程。