《C#初学者指南》一导读

简介: C#(读作“c sharp”)是一种易学的、成熟的编程语言。同时,它也是.NET Framework 的一部分。.NET Framework是很大的一个技术集合,它包罗万象,以至于初学者往往不知从何入手。如果你也是一名初学者,那么本书非常适合你,因为本书就是专门为.NET初学者所编写的教程。


_1

前言

C#初学者指南

欢迎阅读本书。

C#(读作“c sharp”)是一种易学的、成熟的编程语言。同时,它也是.NET Framework 的一部分。.NET Framework是很大的一个技术集合,它包罗万象,以至于初学者往往不知从何入手。如果你也是一名初学者,那么本书非常适合你,因为本书就是专门为.NET初学者所编写的教程。

作为初学者的教程,本书并不会介绍.NET Framework中的每一种技术。相反,本书涵盖C#和.NET Framework 语言中最重要的主题,掌握了这些内容,你才能够自学其他的技术。但是本书的内容很全面,在完全理解各章的内容后,你就能很好地完成中级C#程序员的日常任务。

本书介绍了以下三个主题,它们是专业的C#程序员必须要掌握的。

  • C#程序语言
  • C#的面向对象编程(Object-Oriented Programming,OOP)
  • .NET Framework类库

设计一门高效的C#课程,其困难之处就在于,这三个主题实际上是彼此相关的。一方面,C#就是OOP语言,所以如果你已经了解OOP,那么学习C#的语法就较容易。另一方面,诸如继承、多态、数据封装等OOP的特性,我们最好是用真实案例来讲解。可是,理解真正的C#程序,却需要我们具有.NET Framework类库的知识。

因为这三个主题相互依赖,所以我们不能把它们划分为三个独立的部分。相反,讨论一个主题的章节会和讨论另一个主题的章节交织在一起。例如,在介绍多态之前,本书要确保我们已经熟悉某些.NET Framework的类,以便能给出真实的案例。另外,如果不能很好地理解一组特定的类,我们就很难理解泛型这样的语言特性,而这组特定的类又是在讨论完支持类后才介绍的。

本书中也会有一个主题在两三个地方重复出现的情况。例如,for和while循环语句是一个基本的语言特性,应该在前边的章节中介绍它。用foreach循环遍历一个数组或集合,却只能在介绍过数组和集合类型后再讲解。因此,循环语句首先会出现在第3章,然后在第5章介绍数组和第13章介绍集合时,会再次出现。

本前言接下来的内容会给出.NET Framework的高级概述、OOP的介绍、每章的简单介绍以及.NET Framework的安装指南。

.NET Framework概述
.NET Framework是一种编程环境的常用名称,其规范的叫法为通用语言基础架构(Common Language Infrastructure,CLI)。CLI是微软开发的并且通过了ISO和ECMA的认证标准。ISO和ECMA都是国际标准化机构。

.NET Framework引人注目的地方之一,就是支持多种编程语言。实际上,最新的统计结果表明,有超过30种语言可以使用.NET Framework,包括Visual Basic、C#和C++。这就意味着,如果习惯于使用Visual Basic,可以继续用这种语言编程。如果你是一名C++程序员,也不必为了充分利用.NET Framework所提供的优势而去学习一种新的语言。

但是,多语言支持并不是.NET Framework的唯一特性。它还提供了一整套技术,使软件开发更迅速且应用程序更加健壮和安全。多年来,.NET Framework成为首选的技术,因为它具有以下优点。

  • 跨语言集成
  • 易用性
  • 平台独立性
  • 一个可以加速应用程序开发的庞大的类库
  • 安全性
  • 可扩展性
  • 广泛的行业支持

.NET Framework不像传统的编程环境。在传统的编程中,源代码要编译成可执行代码。这个可执行代码对于目标平台来说是本地的,因为它只能在原计划运行的平台上运行。换句话说,在Windows上编写和编译的代码,只能在Windows上运行;在Linux上编写的代码,只能在Linux上运行,依次类推,如图I-1所示。

3_7_1

相反,.NET Framework程序则编译成通用中间语言(Common Intermediate Language,CIL,读作“sil”或“kil”)代码。如果你熟悉Java,CIL代码相当于Java的字节码。CIL代码此前叫作微软中间语言(Microsoft Intermediate Language)或MSIL代码,只能运行在公共语言运行时(Common Language Runtime,CLR)上。CLR是解释CIL代码的一个本地应用程序。因为CLR可用于多个平台,同样的CIL代码也变成了跨平台的代码。如图I-2所示,我们可以用支持的任何语言编写一个.NET程序并且把它编译成CIL代码。同样CIL代码可以运行在任意已经开发了CLR的操作系统上。除了CIL代码以外,.NET编译器还生成了元数据以描述CIL代码中的类型。这个元数据在术语上叫作清单(manifest)。把CIL代码和相应的清单一起打包成一个.dll或.exe文件,叫作程序集。

3_7

目前,微软提供了CLR针对Windows的实现,但是随着来自Project Mono(http://www.mono-project.com )和DotGNU Portable.NET(http://dotgnu.org/pnet.html)的其他实现,CIL代码已经能够在Linux、Mac OS X、BSD、Sony PlayStation 3和Apple iPhone上运行了。

.NET术语中把只能在CLR之上运行的代码称为托管代码(Managed code)。另一方面,一些.NET语言,诸如C#和C++,既可以生成托管代码又可以生成非托管代码。非托管代码运行在运行时之外。本书只介绍托管代码。

当用C#或其他.NET语言编程时,我们总是使用通用类型系统(Common Type System,CTS)来工作。在解释CTS前,我们要确定你已经了解了什么是类型。那么,什么是类型呢?在计算机编程中,类型决定了值的种类,例如一个数字或一段文本。对于编译器来说,类型信息特别有用。例如,它使得的32这个乘法运算有意义,因为3和2都是数字。但是,我们如果在C#代码中写下VB C#,编译器将认为它无效,因为不能把两段文本相乘,至少,在C#中不允许这样做。

CTS中有5种类型。

  • 结构
  • 枚举
  • 接口
  • 委托
  • 在本书中,我们会逐一介绍这些类型。

面向对象编程的概述

OOP通过对真实世界中的对象建模应用来工作。OOP有三种主要特性:封装、继承和多态。

OOP的好处是很实际的。这也是为什么包括C#在内的大部分现代编程语言都是OO的。我们甚至可以引用为了支持OOP而进行语言转换的两个著名的例子:C语言演变成了C++,而Visual Basic则升级为Visual Basic.NET。

本节介绍OOP的好处并且对学习OOP的难易程度给出一个评估。

OOP的优点

OOP的优点包括代码易维护、代码可复用和可扩展性。下面,我们对这些优点作更详尽的介绍。

1.易维护
当前的应用软件往往非常大。很久以前,一个“大”系统包含几千行代码。而现在,甚至100万行代码都不算是大系统。当系统变得更大的时候,就开始产生一些问题。C++之父Bjarne Stroustrup曾经说过类似于下面的话。小程序可以随便写,即使不是很容易,但最终你还是能让它工作。但是,大程序却截然不同。如果你没有使用“好的编程”技术,新的错误会随着你修正老错误的步伐而不断地产生。

原因就在于,一个大程序的不同部分会相互影响。当我们修改程序的某一部分内容时,可能不会意识到这种变化可能会影响到其他部分。OOP使应用程序更容易模块化,而且模块化使得维护不再头疼。模块化在OOP中是内在的,因为类(它是对象的模板)本身就是一个模块。好的设计应该允许一个类包含相似的功能和相关的数据。在OOP中,一个经常用到的重要的相关术语是耦合,它表示两个模块之间有一定程度的交互。各部分之间的松耦合使得代码更容易实现复用,而复用是OOP的另一个优点。

2.可复用性
可复用性意味着,如果对于最初编写的代码有相同的功能需求,那么代码的编写者或其他人可以复用它们。一种OOP语言通常带有一套现成的库,这并不奇怪。以C#为例,这门语言是.NET Framework的一部分,它提供了一套详细设计并经过测试的类库。编写和发布自己的库也很容易。编程平台中对可复用性的支持是非常吸引人的,因为它会缩短开发时间。

类的可复用性的最大挑战之一就是为类库创建好的文档。程序员如何才能快速地找到提供了他(或她)想要的功能的那个类?找到这样一个类会比从头编写一个新的类更快吗?好在,.NET Framework类库有大量的文档。

可复用性不仅适用于编码阶段类或其他类型的复用,当我们在OO系统中设计一个应用时,OO设计问题的解决方案也可以复用。这些解决方案叫作设计模式。为了更容易地指明每一种解决方案,人们给每种模式都起了一个名称。在经典的设计模式图书《Design Patterns:Elements of Reusable Object-Oriented Software》中,我们可以找到可复用的设计模式的最早的名录,该书作者是Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides。

3.可扩展性
每个应用都是独一无二的,都有自己的需求和规格。说到可复用性,有时我们无法找到一个已有的类能够提供应用程序所需的确切功能。但是,我们可能会找到一个或两个类,它们提供了这些功能的一部分。可扩展性意味着,我们仍然可以使用这些类,通过扩展它们来满足我们的需求。我们还节省了时间,因为不需要从头编写代码。

在OOP中,可扩展性通过继承来实现。我们可以扩展一个已有的类,为它添加一些方法或数据,或者修改不喜欢的方法行为。如果知道该基本功能会在许多示例中使用,但是又不希望类提供非常具体的功能,那么我们可以提供一个通用的类,以后可以扩展它来为应用程序提供具体的功能。

OOP很难吗

C#程序员需要熟练掌握OOP。如果你曾经使用过过程式语言,诸如C或Pascal,你会发现有很大的不同。鉴于此,这既是好消息又是坏消息。

我们先说坏消息。

研究人员一直针对在学校教授OOP的最好的方式而争论不休。有些人认为,最好的方法是在介绍OOP前先教授过程式语言。我们发现,在许多学校,OOP课程往往安排在接近大学最后1年。

但是,最新的研究表明,拥有过程式编程技能的人和OO程序员的视角以及解决问题的模式差异迥然。当熟悉过程式编程的人需要学习OOP时,他所面临的最大障碍就是模式的转变。据说,从过程式转变到面向对象模式,这种观念的转变需要6~18个月的时间。其他的研究也表明,没有学习过过程式编程的学生,不会觉得OOP很难。

我们再来说好消息。

C #是学习OOP的最简单的语言之一。例如,我们不需要担心指针,也不需要花费宝贵的时间去解决由于没有释放不用的对象而引起的内存泄漏的问题。最重要的是,.NET Framework有一个非常广泛的类库,在其早期的版本中,bug相对来说很少。一旦我们掌握了OOP的基本要点,用C#编程是很容易的。

目 录

第1章  初识C#
第2章 语言基础
第3章 语句
第4章 对象与类
第5章 核心类
第6章 继承
第7章 结构
第8章 错误处理
第9章 数字和日期
第10章 接口和抽象类
第11章 枚举
第12章 泛型
第13章 集合
第14章 输入输出
第15章 WPF
第16章 多态
第17章 ADO.NET
附录A Visual Studio Express 2012 for Windows Desktop
附录B Visual C# 2010 Express
附录C SQL Server 2012 Express

相关文章
|
设计模式 缓存 运维
前端“老油条”给初学者的一些建议
这篇文章主要是介绍下现有的一些大厂的工作模式以及使用的技术栈以及经验,如果你是高手的话那可以忽略了,如果是初学者我建议是可以看看的。可以作为一个初步了解,可以从侧面看出自己应该学习哪些技术和知识,学习更多有用的东西,目标更加的明确。
88 0
前端“老油条”给初学者的一些建议
|
消息中间件 存储 安全
重新开始学习编程系列Day01——编程入门
计算机基础知识,操作系统以及内存知识,重新开始学习计算机,学习编程
734 0
重新开始学习编程系列Day01——编程入门
|
前端开发 JavaScript 算法
新手开始学习编程的正确姿势
最近因为疫情的原因,我没有出去找工作。我不会的东西还有很多,野路子学的一些编程知识都不系统化。目前已经感觉到技术提升遭遇瓶颈,想在家里沉淀一下。我在朋友圈还打出 180 天前端逆袭计划 的口号 ,但是自己又总有些踌躇不定。上次写的 CSS 学习笔记我都已经忘记了—— CSS布局之水平居中布局。偶然在 Medium 看到了一篇文章,比较认同作者 Lucas F. Lu 在 The Correct Way To Begin Learning How To Code 一文中的观点,遂于作者取得联系,申请翻译许可。
840 0
新手开始学习编程的正确姿势
|
物联网 Linux
零基础如何自学编程?
一、做好心理准备自学编程的弯路多得数不完,坑多得踩不完。如果你决定要自学编程,就意味着踏上了一条面对困难、挫折和失败的无尽之路,要想清楚自己能不能承受这些挫折,自己能不能坚持走到最后。自学编程过程中总会遇到这样一些问题:编程环境?不会搭建;知识点好多,定义概念,格式规则,缺点优点;刚学的知识怎么又忘了,怎么这也不会那也不会;这个语法是什么逻辑,搞不懂;教程这样做可以,我这样做怎么就不行;敲了半天代码,一运行怎么全是错误;错误解决不了,想放弃,狗带;学了这么久,感觉还没入门;教程内容都是旧的,学起来费力;技术更新了,旧知识不管用,又要重新学。
1863 0
|
数据采集 大数据 PHP
零基础的你还在纠结怎么学习Python编程吗?
想入门学IT,但不知道从哪门编程语言开始学起的同学有很多,小编建议,在编程语言的选择方面,如果你有自己感兴趣的方向,那么就最好选择自己的兴趣,毕竟有兴趣才能有耐心学习。 如果你是零基础,又暂时没有明确的目标,那么可以先从简单的Python语言入手。
2048 0
|
程序员 Android开发 UED
UI设计初学者应该如何入门?
1、UI设计师是什么? 不说UI设计师,就连设计师,很多人都以为只是P图的美工,这里有必要先明确一下UI设计师的概念。当我们要学习一门技能,进入一个行业的时候,此时此刻正确的认知对于我们来说太重要了。
1317 0
|
JavaScript 前端开发 Java
小白编程系列(一):编程语言选择
前言 汇智网开通以来访问量一直在持续不断的攀升,数以百万计的用户为了学习编程,访问了我们的网站,通过使用我们有在线编程环境的互动课程获得了一些自己想学习的知识。
1481 0