◆本章内容

(1)了解软件

(2)软件开发相关概念

(3)认识.NET Framework

(4)C#语言

(5)Visual Studio 2017

◆本章简述

软件在现代人们的日常生活中随处可见,比如,大家使用的Windows操作系统、智能手机中的各种应用等都是软件,那么,这些软件是如何生成的呢?我们能不能开发自己的软件呢?答案是肯定的。C#是微软公司推出的一种语法简洁、类型安全的面向对象的编程语言,使用C#就可以开发各种软件,而Visual Studio 2019是目前开发C#程序最新的工具。本章将带领大家了解C#语言及其使用的集成开发环境(IDE)——Visual Studio 2017。

“千里之行,始于足下!”赶快开始你的C#编程之旅吧!

1.1  了解软件

随着计算机的普及,计算机中的软件对人们的日常生活和工作显得越来越重要。例如,大家在聊天时常用的QQ软件(如图1.1所示);在工作中,使用的Office办公软件(如图1.2所示);在观看视频时使用的腾讯视频等视频播放软件(如图1.3所示)等等。

以上是常用的一些软件, 那么,到底什么是软件呢?

软件其实是一种计算机程序,而计算机程序是指为了得到某种结果,由计算机等具有信息处理能力的硬件装置执行的代码化指令集合。

计算机程序告诉计算机如何完成一个具体的任务,由于现在的计算机还不能理解人类的自然语言,所以不能用自然语言编写计算机程序,这时就需要借助计算机语言( 即程序设计语言),它是人与计算机交流信息的工具,可以通过计算机语言指挥计算机如何工作。

一个软件的生成过程为:程序员先将由计算机语言组成的代码输入到计算机中,然后计算机对代码进行解释编译,最后由计算机生成软件,如图1.4所示。

1.2  软件开发相关的概念

通常计算机程序中涉及的概念都比较抽象、专业。本节将对与软件开发相关的常用概念进行介绍。

1.2.1  算法

算法是指对计算机工作步骤和方法的描述,算法的每个步骤都是严格规定好的,使其能够被计算机识别并正确执行,并且每一个步骤都能够被计算机理解为一个或者一组唯一的动作,而不会使计算机产生歧义。算法必须有开始和结束,并且必须保证算法规定的每一个步骤最终都能够被完成。

下面通过一个例子来说明算法。例如,要交换变量a与变量b的值,计算机本身不能直接执行这个操作,那么就可以通过交换变量值的方法进行计算。交换两个变量值的通用方法主要是借用第三方变量作为临时变量。

具体算法描述如下:

(1)将变量a的内容赋值给临时变量c。

(2)将变量b的内容赋值给变量a。

(3)将临时变量c存放的内容赋值给变量b。

最终算法可以写成:

(1)c←a。

(2)a←b

(3)b←C。

综上所述,算法实际上就是用自然语言描述的一个计算机程序,编写计算机程序就是把用某种方式描述的算法,再通过计算机语言重新对其进行描述。

1.2.2  数据结构

数据结构是一种计算机存储、组织数据的方式。数据很好理解,比如去买东西时共花了50元钱,50就是一个准确的数据。在计算机中,数据有整数、实数、字符串、图像和声音等多种类型,而数据结构就是指各种类型数据之间的相互关系。常见的数据结构有数组、栈、队列、链表、树、图等。例如,图1.5为一个树结构示意图。

1.2.3  集成开发环境IDE

IDE是Integrated Development Environment 的缩写,表示“集成开发环境”,它是一种用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试工具和图形化用户界面工具等,例如,用于开发C#程序的Visual Studio (如图1.6所示)、用于开发Java程序的Eclipse (如图1.7所示)等,都是集成开发环境。

1.2.4  软件开发工具包SDK

SDK是Software Development Kit的缩写,中文意思是“软件开发工具包”,这是一个覆盖面相当广泛的名词,可以这么说,辅助开发某一类软件的相关文档、实例和工具的集合都可以叫作SDK。例如,在使用C#语言进行开发之前,需要安装由微软公司推出的.NET SDK (即.NET软件开发工具包)。

1.2.5  编译

编译是把计算机语言变成计算机可以识别的二进制语言,由于计算机只识别0和1,所以编译程序就是把使用计算机语言编写的程序,编译成计算机可以识别的二进制程序的过程。

1.3  认识.NET Framework

.NET Framework又称.NET框架,它是微软公司推出的完全面向对象的软件开发与运行平台,尽管.NET Framework运行在Windows操作系统和Windows Mobile操作系统上,但它也有运行在其他操作系统上的版本,例如Mono, Mono 是.NET Framework 的开源版本(包含C#编译器),该版本可以运行在几个操作系统上,包括各种Linux版本和MacOS。

Mono是.NET生态系统的重要组成部分,对于使用Xamarin创建客户端应用程序尤其重要。微软还创建了一个跨平台的开源库.NET Core,希望为Mono和.NET Core框架提供帮助。

可以使用.NET Framework 创建桌面应用程序、Windows Store(UWP)应用程序、云/Web应用程序、Web API和其他各种类型的应用程序。另外注意,对于Web.云和Web API应用程序,按照定义,它们是多平台的应用程序,因为任何带有Web浏览器的系统都可以访问它们。

.NET Framework有两个主要组件,分别是:公共语言运行时(Common Language Runtime,简称CLR)和类库,如图1.8所示。

下面分别对.NET Framework的两个主要组成部分进行介绍:

(1)公共语言运行时:公共语言运行时(CLR) 负责管理和执行由.NET编译器编译产生的中间语言代码(.NET程序执行原理如图1.9所示)。在公共语言运行时中包含两部分内容,分别为CLS 和CTS,其中,CLS表示公共语言规范,它是许多应用程序所需的一套基本语言功能: 而CTS表示通用类型系统,它定义了可以在中间语言中使用的预定义数据类型,所有面向.NET Framework的语言都可以生成基于这些类型的编译代码。

说明:中间语言(IL 或MSIL,Microsoft Intermediate Language)是使用C#或者VB.NET编写的软件,只有在软件运行时,.NET编译器才将中间代码编译成计算机可以直接读取的数据。

(2)类库:类库里有很多编译好的类,可以直接使用。例如,进行多线程操作时,可以直接使用类库里的Thread类:进行文件操作时,可以直接使用类库中的IO类等。类库实际上相当于一个仓库,这个仓库里面装满了各种工具,可以供开发人员直接使用。

1.3.1  .NET Standard和.NET Core

微软最初创建.NET Framework时,将其设为在多平台上运行,但还没有业界接受的开源分支的概念。如今项目可以被分支并在多个平台上定制运行。例如,.NET Compact Framework和.NET Micro Framework是.NET Framework的分支,就像.NET Core一样。.NET Core是进行跨平台代码开发的最优化的解决方案。每个.NET Framework的分支都有组具体的要求和目标, 正是这些需求和目标催生了对应的分支。

.NET Framework中包含一组基类库(Base Class Libraries, BCL), 这些库中包含的API用于大多数开发人员需要程序完成的基本操作,例如访问文件、处理字符串、管理流、将数据保存到集合中、安全属性等。这些基本功能的实现通常在不同的.NET Framework版本中是不同的。这就要求开发人员根据应用程序运行的平台,针对应用程序的不同分支或版本去学习、开发和管理多个BCL。.NET Standard已经解决了这个问题。

微软的期望是,这个分支概念很快将导致更多的.NET Framework版本出现。版本数量的增加,就需要有一组标准的基本编程API来处理每种分支与版本。若没有这个跨平台的基本库,开发和支持的难度会阻止这些分支版本被迅速采用。简言之,NET Sandard是一个类库,它提供的API支持使用了.NET Patom的应用程序的任何分支或版本。

1.3.2  使用.NET Framework和.NET Core编写应用程序

使用NET Framework或NET Core编写应用程序,就是使用.NET代码库编写代码(使用支持.NET Framework的任何一种语言)。 本课程用Visual Studio 进行开发,Visual Studio 是一种强大的集成开发环境,支持C#(以及托管和非托管C++、Visual Basic和其他一些语言)。

这个环境的优点是便于把.NET功能集成到代码中。我们创建的代码完全是C#代码,

为执行C#代码,必须把它们转换为目标操作系统能理解的语言,即本机代码(native code)。这种转换称为编译(compiling)代码,由编译器执行。在.NET Framework和.NET Core下,此过程包括两个阶段:

(1)CIL和JIT

在编译使用.NET Framework或NET Core库的代码时,不是立即创建专用于操作系统的本机代码,而是把代码编译为通用中间语言(Common Intermediate Language, CIL)代码,这些代码并非专门用于任何一种操作系统,也非专门用于C#。其他.NET语言(如Visual Basic .NET或F#)也会在第一阶段编译为这种语言。开发C#应用程序时,这个编译步骤由Visual Studio完成。

要执行应用程序,必须完成更多工作,这是Just-In-Time(JIT)编译器的任务,它把CIL编译为专用于OS和目标机器架构的本机代码。这样OS才能执行应用程序。CIL 代码仅在需要时才编译。这种编译可以在应用程序的运行过程中动态发生,不过开发人员一般不需要关心这个过程。除非要编写性能十分关键的高级代码,否则知道这个编译过程会在后台自动进行,并不需要人工干预就可以了。

(2)程序集

编译应用程序时,所创建的CIL代码存储在一个程序集(assembly)中。程序集包括可执行的应用程序文件(这些文件可以直接在Windows上运行, 不需要其他程序,其扩展名是.exe)和其他应用程序使用的库(其扩展名是.dll)。

除包含CIL外,程序集还包含元信息(即程序集中包含的数据的信息,也称为元数据)和一些可选的资源(CIL使用的其他数据,例如,声音文件和图片)。元信息允许程序集是完全自描述的。不需要其他信息就可以使用程序集,也就是说,我们不会遇到没有把需要的数据添加到系统注册表中这样的问题,而在使用其他平台进行开发时这个问题常常出现。

(3)托管代码

在将代码编译为CIL,再用JIT编译器将它编译为本机代码后,CLR/CoreCLR的任务尚未全部完成,还需要管理正在执行的用NET Framework和NETCore编写的代码(这个执行代码的阶段通常称为运行(runtime))。即CLR/CoreCLR管理着应用程序,其方式是管理内存、处理安全性以及允许进行跨语言调试等。相反,不受CLR/CorCLR控制运行的应用程序属于非托管类型,某些语言(如C++)可以用于编写此类应用程序,例如,访问操作系统的底层功能的应用程序。但是在C#中,只能编写在托管环境下运行的代码。我们将使用CLR/CoreCLR的托管功能,让.NET 处理与操作系统的任何交互。

(4)垃圾回收

托管代码最重要的一个功能是垃圾回收(garbage collection)。这种.NET方法可确保应用程序不再使用某些内存时,就会完全释放这些内存。在.NET推出以前,这项工作主要由程序员负责,代码中的几个简单错误会把大块内存分配到错误的地方,使这些内存神秘失踪。这通常意味着计算机的速度逐渐减慢,最终导致系统崩溃。

.NET垃圾回收会定期检查计算机的内存,从中删除不再需要的内容。执行垃圾回收的时间并不固定,可能一秒钟内会进行数千次的检查, 也可能每几秒钟才检查一次,不过一定会进行检查。

这里要给程序员一些提示。因为是在不可预知的时间执行这项工作,所以在设计应用程序时,必须留意这一点。需要许多内存才能运行的代码应自行完成清理工作,而不是坐等垃圾回收。

1.4  C#语言

C# (读作C Sharp)是一种面向对象的编程语言,从C和C++语言演化而来,是微软专门为使用.NET平台而创建的,主要用于开发运行在.NET平台上的应用程序,C#的语言体系都是构建在.NET框架上。C#吸取了以往语言失败的教训,融合了其他语言的许多优点,并解决了它们存在的问题。通过TIOBE编程语言排行榜(如图1.10所示)可以看出,C#长期居于主流编程语言行列,这也说明了C#语言被越来越多的人所认可和使用。本节将详细介绍C#语言的特点以及C#与.NET的关系。

1.4.1  C#语言的发展

C#是微软公司在2000年6月发布的一种编程语言,主要由Anders Hejlsberg( Delphi和Turbo Pascal语言的设计者)主持开发,它主要是微软公司为配合.NET战略推出的一种全新的编程语言。

由于C#语言本身是为了配合.NET战略推出的,因此其发展变化一直与.NET的发展相辅相成,具体版本发展历程如图1.11所示。

1.4.2  C#语言的特点

C#语言的主要特点如下:

(1)语法简洁,不允许直接操作内存,去掉了指针操作。(C#中与C++高级功能等价的功能(例如直接访问和处理系统内存),只能在标记为“unsafe"的代码中使用。这种高级编程技术存在潜在威胁,因为它可能覆盖系统中重要的内存块,导致严重后果。)

(2)C#是一种类型安全的语言(与C++不同)。这表示一旦为某个数据指定了类型,就不能转换为另一种不相关的类型。在类型之间转换时,必须遵守严格的规则。

(3)彻底的面向对象设计,C#具有面向对象语言所应有的一切特性:封装、继承和多态。

(4)与Web紧密结合,C#支持绝大多数的Web标准,例如HTML、XML、SOAP等。

(5)强大的安全性机制,可以消除软件开发中常见的错误( 如语法错误),.NET 提供的垃圾回收器还能够帮助开发者有效地管理内存资源。

(6)兼容性较好,因为C#遵循.NET的公共语言规范(CLS), 从而保证能够与其他语言开发的组件兼容。

(7)完善的错误、异常处理机制,C#提供了完善的错误和异常处理机制,使程序在交付应用时能够更加健壮。

1.4.3  C#与.NET Framework

.NET Framework是微软公司推出的一个全新的开发平台,而C#是专门为与微软公司的.NET Framework一起使用而设计的一种编程语言,在.NET Framework平台上开发时,可以使用多种开发语言,比如C#、VB.NET、 VC++.NET、 F#等,而C#只是其中的一种。

1.4.4  C#的应用领域

.NET Framework没有限制应用程序的类型。C#使用的是NET Framework,所以也没有限制应用程序的类型(但是,目前使用.NET Core仅可以编写Console和ASP.NET应用程序)。这里仅讨论几种常见的应用程序类型:

(1)桌面应用程序这些应用程序(如Microsoft office)具有我们很熟悉的Windows外观和操作方式,使用.NET Framework的Windows Presentation Foundation(WPPD模块就可以简便地生成这种应用程序。WPF模块是一个控件库,其中的控件(例如按钮、工具栏和菜单等)可用于建立Windows用户界面(UI)。

(2)Windows Store 应用程序这是 Windows 8中引入的一类新的应用程序。 此类应用程序主要针对触摸设备设计,通常全屏运行,侧重点在于简洁清晰。创建这类应用程序的方式有多种,包括使用WPF。

云Web应用程序.NET Framework和.NET Core包括一个动态生成 Web内容的强大系统——ASP NET,允许进行个性化和实现安全性等。另外,这些应用程序可以在云中驻留和访问,例如Microsoft Azure平台。

(3)Web API 这是建立REST风格的HTTP服务的理想框架,支持许多客户端,包括移动设备和浏览器。

(4)WCF服务这是一种灵活创建各种分布式应用程序的方式。使用WCF服务可以通过局域网或Internet交换几乎各种数据。无论使用什么语言创建WCF服务,也无论WCF服务驻留在什么系统上,都使用一样简单的语法。

C#几乎可用于所有领域,如便携式计算机、手机或者网站等,其应用领域主要包括:

(1)游戏软件开发

(2)桌面应用系统开发

(3)智能手机程序开发

(4)多媒体系统开发

(5)网络系统开发

(6)RIA应用程序( Silverlight)开发

(7)操作系统平台开发

(8) WEB应用开发

1.5  Visual Studio 2017

Visual Studio 2017是微软为了配合.NET战略推出的集成开发环境,同时也是目前开发C#程序最新的工具。Visual Studio不是开发C#应用程序必需的开发工具或集成开发环境(IDE),但使用它可以使任务更简单一些。如果愿意的话,可在基本的文本编辑器(如常见的记事本应用程序)中处理C#源代码文件,再使用NET Framework和.NET Core中包含的命令行编译器把代码编译到程序集中。本节将对Visual Studio 2017的安装进行详细讲解。

1.5.1  Visual Studio 2017产品

Microsoft提供了如下几个Visual Studio版本:

(1)Visual Studio Code

(2)Visual Studio Community

(3)Visual Studio Professional

(4)Visual Studio Enterprise

其中,Visual Studio Code 和Community版本可免费获得。但Professional 和Enterprise版本提供了一些额外的功能,需要购买才能获得。

各种Visual Studio产品可以创建所需的几乎所有C#应用程序。Visual Studio Code是一个简单但健壮的代码编辑器,它运行在Windows、Linux 和iOS 操作系统上。与Visual Studio Code不同,Visual Studio Community在外观和操作方式上类似于Visual Studio Professional和Enterprise。 虽然微软在Visual Studio Community中提供了许多与Professional 和Enterprise 版本相同的功能,但还是缺少一些重要功能,比如深度调试功能和代码优化工具。

1.5.2  安装Visual Studio 2017必备条件

安装Visual Studio 2017之前,首先要了解安装Visual Studio 2017所需的必备条件,检查计算机的软硬件配置是否满足Visual Studio 2017开发环境的安装要求,具体要求如表1.12 所示。

1.5.3  安装Visual Studio 2017

本节以Visual Studio 2017社区版的安装为例讲解具体的安装步骤。

说明: Visual Studio 2017社区版是完全免费的,安装Visual Studio 2017开发环境时,要求计算机上必须安装了.NET Framework4.6框架。当前Visual Studio已更新到2019版本,

安装Visual Studio 2017社区版的步骤如下:

(1)Visual Studio 2017社区版的安装文件是exe可执行文件,其命名格式为“vs comunity_译版本号.exe”,双击该文件开始安装。

程序首先跳转到如图1.13所示的Visual Studio 2017安装程序界面,在该界面中单击“继续”按钮。

(2)等待程序加载完成后,自动跳转到安装选择项界面,如图1.14所示,该界面主要将“通用Windows平台开发”“.NET桌面开发”及“ASP.NET和Web开发”这3个复选框选中,其他的复选框,读者可以根据开发需要确定是否选择安装;选择完要安装的功能后,在下面“位置”处选择要安装的路径,建议不要安装在系统盘上,可以选择-个其他磁盘进行安装,设置完成后,单击“安装”按钮。

(3)跳转到如图1.15所示的安装进度界面,该界面会显示当前的安装进度。

(4)等待安装后,程序自动进入安装完成页,如图1.16所示,在该界面中,可以直接单击“启动”按钮,启动新安装的Visual Studio 2017开发环境,也可以在系统的“开始”菜单中,选择“Visual Studio 2017”菜单启动该开发环境。

说明:在安装完成界面可能会出现一个“Android SDK”相关的警告信息,这些警告信息不影响Visual Studio 2017开发环境的正常使用,忽略即可。

如果是第一次启动Visual Studio 2017,会出现如图1.17所示的提示框,直接单击“以后再说"超链接,进入Visual Studio 2017开发环境的主界面。Visual Studio 2017开发环境主界面如图1.18所示。

C#入门到精通系列课程——第1章软件开发及C#简介的更多相关文章

  1. C#入门到精通系列课程——第3章变量及运算符

    ◆本章内容 (1)变量是什么 (2)变量的声明及初始化 (3)常量 (4)运算符 (5)数据类型转换 (6)运算符优先级及结合性 (7)难点解答 ◆本章简述 很多人认为学习C#之前必须要学习C++,其 ...

  2. C#入门到精通系列课程——第2章编写C#程序

    ◆本章内容 (1)熟悉Visual Studio 2017开发环境 (2)编写第一个C#程序 (3)C#程序结构预览 (4)程序编写规范 (5)难点解答 ◆本章简述 要学习C#编程,必然要熟悉C#程序 ...

  3. ArcGIS10从入门到精通系列实验图文教程(附配套实验数据持续更新)

    @ 目录 1. 专栏简介 2. 专栏地址 3. 专栏目录 1. 专栏简介 本教程<ArcGIS从入门到精通系列实验教程>内容包括:ArcGIS平台简介.ArcGIS应用基础.空间数据的采集 ...

  4. Provisioning Services 7.6 入门到精通系列之一:PVS前期规划

    1.  Provisioning Services 产品概述 Provisioning Services (简称PVS)采用了一种与传统映像解决方案截然不同的方法,从根本上改变了硬件与依托硬件而运行的 ...

  5. Jenkins pipeline 入门到精通系列文章

    Jenkins2 入门到精通系列文章. Jenkins2 下载与启动jenkins2 插件安装jenkins2 hellopipelinejenkins2 pipeline介绍jenkins2 jav ...

  6. 办公软件Office PPT 2010视频教程从入门到精通系列教程(22课时)

    办公软件Office PPT 2010视频教程从入门到精通系列教程(22课时) 乔布斯的成功离不开美轮美奂的幻灯片效果,一个成功的商务人士.部门经理也少不了各种各样的PPT幻灯片.绿色资源网给你提供了 ...

  7. NHibernate从入门到精通系列

    http://www.cnblogs.com/GoodHelper/archive/2011/02/17/1948744.html NHibernate从入门到精通系列(4)——持久对象的生命周期(上 ...

  8. Selenium 入门到精通系列:六

    Selenium 入门到精通系列 PS:Checkbox方法 例子 HTML: <html> <head> <title>测试页面</title> &l ...

  9. Selenium 入门到精通系列:五

    Selenium 入门到精通系列 PS:显式等待.隐式等待.强制等待方法 例子 #!/usr/bin/env python # -*- coding: utf-8 -*- # @Date : 2019 ...

随机推荐

  1. oracle之用户

    命令都是在命令行窗口执行 创建用户 1)登陆管理员用户 sqlplus system/密码 sqlplus system/briup 注意不要以分号结尾 2)创建用户 create user 用户名 ...

  2. CentOS7上安装伪分布式Hadoop

    1.下载安装包 下载hadoop安装包 官网地址:https://hadoop.apache.org/releases.html 版本:建议使用hadoop-2.7.3.tar.gz 系统环境:Cen ...

  3. shell编程基础二

    一.流程控制 while循环:只要条件满足一直循环 read -p "请输入一个数字:" white_data while [ ${white_data} -lt 20 ] do ...

  4. hexo 报错 use_date_for_updated is deprecated...

    hexo 报错 use_date_for_updated is deprecated... WARN Deprecated config detected: "use_date_for_up ...

  5. 剑指 Offer 24. 反转链表

    剑指 Offer 24. 反转链表 Offer 24 题目描述: 常规解法 本题的解法很常规,没有其他特别的坑,只需要将链表反转即可. package com.walegarrett.offer; / ...

  6. React函数式组件和类组件[Dan]

    一篇对Dan的 How Are Function Components Different from Classes? 一文的个人阅读总结,内容来自于此.强烈推荐阅读 Dan Abramov.的博客. ...

  7. MySQL 多表查询与事务的操作

    表连接查询 什么是多表查询 # 数据准备 # 多表查询的作用 * 比如:我们想查询孙悟空的名字和他所在的部门的名字,则需要使用多表查询 # 如果一条 SQL 语句查询多张表,因为查询结果在多张不同的表 ...

  8. sap2000v21安装教程(附详细安装步骤+中文安装包)

    sap2000 v21是sap2000系列软件的全新版本,也是目前行业中的一款用于结构分析和设计的集成软件,该软件保持了原有产品的传统,具有完善.直观和灵活的界面,能够在交通运输.工业.公共事业.体育 ...

  9. 漏洞复现-2.x rce-Thinkphp远程命令执行

                0x00实验环境 攻击机:win10 靶机:Ubuntu18 (docker搭建的vulhub靶场) 0x01影响版本 影响Thinkphp 2.x的版本 0x02实验目的 学 ...

  10. 【工具】 memtester内存压力测试工具

    作者:李春港 出处:https://www.cnblogs.com/lcgbk/p/14497838.html 目录 一.简介 二.Memtester安装 三.使用说明 四.测试示例 一.简介 mem ...