C#上位机实战开发指南

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

C#上位机实战开发指南第一章C#和VisualStduio1.1.NET时代在.NET之前,尤其是20世纪90年代,Windows程序员几乎使用VB,C或者C++。部分C和C++开发者使用纯Win32Api,但是大多数人还是选择使用MFC。这些语言开发难度较大,底层代码复杂。21世纪初期越来越多的开发者迫切需要一个安全,集成度高,面向对象的开发框架。2002年,微软如期发布了.NET框架的第一个版本,它具有如下几个特点:●多平台可在任意计算机系统运行,包括服务器,台式机等。●安全性提供更加安全的运行环境,即使有来源可疑的代码存在。●行业标准使用标准通信协议,比如HTTP,SOAP,JSON等。在2016年最新一期的编程语言排行榜中C#.NET位列第四,而且呈上升趋势。排行榜如图1-1所示。图1-11.2C#的前世今生C#是微软发布的一种面向对象,运行于.NET之上的高级语言。也是微软近几年主推的开发语言,可以说是微软.NET框架的主角。只要具备一些C语言基础就可以非常迅速的入门C#开发,这也是我极力推荐使用C#开发上位机的一个重要原因。1.3难以置信的VisualStudio2015VisualStudio2015(以下简称VS2015)是微软推出的开发环境,C#也是基于此开发。相比较之前的版本,VS2015具有更强大的调试功能,甚至集成了安卓,IOS等跨平台开发环境。作为一个强大的集成开发环境,VS2015同时还能支持STM32单片机的编译。具体教程请参看:。笔者认为VS2015是宇宙最强IDE,完虐我们常用的单片机开发环境如KEIL,IAR等。更多使用技巧就留给读者自己去发现吧。1.4VS2015的安装与使用第二章C#语法基础2.1C#编程概述本章将为上位机开发打基础,当然具有C语言或者单片机开发经验的同学也可以跳过本章,直接进入第三章窗体程序的学习中。因为C#和C语言在语法上大致相同。本章只讲解一些与单片机C语言相差较大的部分,其余不再过多讲解。代码分析也全部放在第三章以后。若想深入学习C#,请参考专业入门书籍,推荐《C#图解教程》(第四版)。2.2命名空间在C#中,命名空间提供了一种组织相关类和其它类型的方式。我理解的命名空间就是一个集装箱,里面可以装下很多类和方法。其实我们也可以认为所谓的命名空间相当于C语言中的头文件,只不过include变为了usingnamespace。具体的书写规范见代码清单2-1。代码清单2-1:命名空间书写规范1.usingSystem;//命名空间类似于头文件2.usingSystem.Collections.Generic;//using≈include;Systerm≈xxxx.h3.usingSystem.ComponentModel;4.usingSystem.Data;5.usingSystem.Drawing;6.usingSystem.Text;7.usingSystem.Windows.Forms;8.9.//用户自定义命名空间,相当于新定义一个头文件10.//一般情况下一个上位机工程对应一个新的命名空间11.namespaceDemo12.{13.14.publicpartialclassForm1:Form15.{16.//构造函数,新建窗体工程时自动创建这段代码,可先忽略17.publicForm1()18.{19.InitializeComponent();20.}21.}22.}这段代码在新建工程之后由VS2015自动创建,第1到7行代码全都为系统自带的命名空间。第11行为开发人员自定义的命名空间,之后的每一个上位机项目都是一个自定义命名空间。大概了解了C#命名空间的书写格式规范后,我们再简单回忆一下C语言中头文件的书写规范并比较二者的异同点,C头文件书写格式见代码清单2-2。代码清单2-2:C头文件书写规范1.#ifndef__USART_H2.#define__USART_H3.4.5.#includestm32f10x.h6.#includestdio.h7.#includestring.h8.9.10.#defineTxBuffSize25611.12.13.#defineDebug_ON114.15.16.#defineDebugPutInfo(fmt,arg...)do{if(Debug_ON)printf(fmt,##arg);}while(0)17.18.19.voidUSART_Config(void);20.voidUSART1_SendByte(uint8_tDataToSend);21.voidUSART1_SendString(constchar*StringToSend);22.voidUSART1_SendBuff(uint8_t*DataToSend,uint8_tDataNum);23.24.25.#endif通过代码清单2-2我们很容易发现,C#的命名空间和C的头文件遵循一样的规则,即要想使用某方法某函数则必须要包含方法所在的命名空间或者头文件。这是相同点。不同点则表现在C语言在声明了头文件和函数接口后必须要在对应的C文件中编写函数体后才可使用。C#则将省去了函数声明,直接即可编写对应的函数体。2.3类2.3.1什么是类在C#开发中,类(class)至关重要。可以认为类是C#一个很大的主题。关于它的讨论将一直延续到本书结束。我们在单片机软件开发中设计数据结构时往往离不开先设计结构体,其实类就相当于结构体,这也是面向对象的一个前提条件。我们可以将类抽象成一个既能存储数据又能执行代码的数据结构。它包含数据成员和函数成员,因此类对C#代码的封装起着举足轻重的作用。2.3.2如何声明一个类类的声明和结构体类似,即定义了一个新类的成员和特征。但是它并不创建类的实例,相当于结构体声明后并不分配内存,只有在使用时声明后才会分配内存一样,类的声明和实例化不可混淆。类的声明方式如代码清单2-3所示。代码清单2-3:类的声明方式1.usingSystem;//命名空间类似于头文件2.usingSystem.Collections.Generic;//using≈include;Systerm≈xxxx.h3.usingSystem.ComponentModel;4.usingSystem.Data;5.usingSystem.Drawing;6.usingSystem.Text;7.usingSystem.Windows.Forms;8.9.//用户自定义命名空间,相当于新定义一个头文件10.//一般情况下一个上位机工程对应一个新的命名空间11.namespaceDemo12.{13.14.publicpartialclassForm1:Form15.{16.//构造函数,新建窗体工程时自动创建,可先忽略17.publicForm1()18.{19.InitializeComponent();20.}21.22.//类的声明方式23.classMyClass24.{25.//成员声明......26.//class为类的关键字,MyClass为类名27.}28.}29.}从代码清单2-3可以清晰看出,类的声明非常简单。其中类的成员可以是变量,也可以是函数方法。2.4Main:程序由你开始每一个C#程序都必须有一个类带有Main函数(方法),它是程序的开始,它通常被声明在Program类中。这就好比我们在开发单片机时喜欢将main函数声明在main.c中一样。通常Program.cs文件随工程一起创建,详细代码见图2-1。图2-1从图中我们清晰的看到了Class关键字,其实Program.cs本身就是一个类文件。2.5变量与常量2.5.1值类型与引用类型值类型和我们单片机开发中的数据类型类似,需要一段独立内存存放它的实际数据。如果值类型变量定义在方法(函数)内部那么在调用结束后这片内存回收。相反如果定义为全局,那这片内存则不会被回收。这和C基本一样。char,intfloat,enum,struct等都是值类型。引用类型是一个特殊的类型,它的存储需要两片内存。实例数据存放在堆中,引用存放在栈中,引用可以理解为指针。具体引用类型为什么需要两片内存不再做任何讨论,我们只需要知道引用类型的使用和常规的值类型有什么区别就行。C语言中如果我们表示一段字符串可以定义一个指针,在C#中直接使用string关键字即可定义。string便是一个非常典型的引用类型,它不遵循值类型的规则。当我们定义一个string类型变量并且第一次赋值时假设它在地址0x02000000中,那么在第二次赋值再次查看内存时,它已经不在上一次地址中,即引用类型每次在使用后都会变更内存地址。引用类型在并行多线程的使用中尤为重要。当然,在上位机开发中我们可以将引用类型当作一般类型来使用。2.5.2声明变量C#声明变量和C语言相同,声明过程完成两件事。●给变量命名,并且关联一种类型●编译器为其分配一片内存2.5.3变量的作用域类中的变量作用域就在类中,类被回收,变量即被回收。方法(函数)内部变量作用域为整个方法体。其中如果变量是某循环某判断中定义的,作用域就在循环或者判断体内。2.5.4访问修饰符代码清单2-3中类的声明在class前未添加任何访问修饰符,C#规定无访问修饰符的情况下类成员即为隐式私有,外部不可访问。C#常用的访问修饰符有以下5个。◇私有的:private◇公开的:public◇受保护的:protected◇内部的:internal◇受保护内部的:protectedinternal顾名思义,private私有即外部不可访问,只能在类的内部使用,而public修饰的变量则可以在类的外部访问。关于private和public以及变量在类中的使用查看代码清单2-4。代码清单2-4:访问修饰符及变量在类中的简单使用1.usingSystem;//命名空间类似于头文件2.usingSystem.Collections.Generic;//using≈include;Systerm≈xxxx.h3.usingSystem.ComponentModel;4.usingSystem.Data;5.usingSystem.Drawing;6.usingSystem.Text;7.usingSystem.Windows.Forms;8.9.//用户自定义命名空间,相当于新定义一个头文件10.//一般情况下一个上位机工程对应一个新的命名空间11.namespaceDemo12.{13.publicpartialclassForm1:Form14.{15.//构造函数,新建窗体工程时自动创建,可先忽略16.publicForm1()17.{18.InitializeComponent();19.}20.21.intdata0=0;//全局变量声明,变量声明后即可在方法中使用22.//与C语言相同23.24.25.//类的声明方式26.classMyClass27.{28.//成员声明......29.//class为类的关键字,MyClass为类名30.31.intdata1=0;//无修饰符默认隐式私有32.//外部不可访问33.34.publicintdata2=0;//公有,外部可访问35.}36.}37.}从代码清单2-4可看出类MyClass中data2添加了修饰符public,因此它可以在类的外部被调用。2.6多线程的使用2.6.1线程概述相信大家在嵌入式RTOS中就已经接触过多线程(多任务)的处理机制。同样在多线程的使用下C#便可以并行执行代码。注意,这里的并行并不是真正意义上的同时执行,只是任务上下文切换速度极快,给人的感觉好像是在并行。一个C#程序开始于一个单线程(Main方法入口),这个线程是由操作系统自动创建的,我们也称之为主线程或者UI线程。同时主线程下可以创建多个子线程。2.

1 / 14
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功