由于微信公众号改变了推送规则,为了每次新的推送可以在第一时间出现在您的订阅列表中,记得将本公众号设为星标或置顶喔~
根据笔者经验,分享了C#编程语言、面向对象以及MFC、WinForm与WPF界面框架相关知识~
🌿前言
c#作为测绘程序设计大赛官方要求的编程语言之一,深受参赛选手的欢迎,因为另外两门分别为C/C++和Basic🤣,如果读者不了解C#编程语言,可能会更倾向于熟知的C/C++编程语言。本文将带领读者认识C#,运用生活案例来了解面向过程和面向对象编程模式,通过简单介绍对比C/C++ MFC、C# WinForm以及C# WPF界面编程框架,让读者重新抉择。
🍀认识C#
C#(读作 C Sharp 而不是 C井)是一门由微软开发的基于C++和Java语言而设计的纯面向对象编程语言。据学过Java和C#的朋友提到:C#与Jave编程语言很相似,笔者没有系统学习过Java,只是觉得C/C++、C#、Java的编程语法都很相似:都是以大括号嵌套为代码块(大括号巨多😂);不像Python是以缩进来判定代码块、Matlab以关键字end为代码块结束标识。
C#也是一门不断成长的编程语言:C#获得TIOBE2023年年度编程语言奖,TIOBE 软件公司首席执行官 Paul Jansen 表示,“二十多年来,C# 一直稳居前十名,如今,它正在追赶 Python、C、C++、Java 四大语言的脚步,成为一年内涨幅最大的语言(+1.43%),赢得了当之无愧的奖项。”
C#的应用场景也非常的广阔:游戏开发(Unity引擎)、Web开发、后端开发、桌面应用开发以及一些嵌入式设备、工业上位机(工业监控与控制系统)等等。因为搭建界面的成本低、开发效率高,所以也深受开发者的喜欢。
🌱C#程序结构
C#是纯面向对象的语言,源码文件中会有命名空间、类、函数等概念,C#和C/C++语言一样,控制台应用程序都是从主函数(Main)开始执行的,一个项目里面只允许有一个主函数(Main)。
🛴教室的桌椅
通过教室的桌椅来类比C#的程序结构,可能会加深记忆:1教101教室就是一个命名空间,在这个命名空间里面有桌子、椅子、黑板、灯…等等组成若干个类,具体到第一组第一排的桌子就是一个对象,桌子有颜色、有高度、宽度就是桌子的属性变量,桌子具有存放东西的功能就是其操作函数。
🍔🍔🍔🍔🍔
实在想不起来该小节该怎么命名了,就请读者吃五个汉堡🍔吧🤣。
- 🍔什么是命名空间?
按照教室的桌椅的类比,命名空间就是程序代码的一种组织形式:101教室的桌子和102教室的桌子能一样吗😂?在Java编程语言中,一个命名空间通常会对应一个文件夹、如果代码文件存放的文件夹与代码内部的命名空间不一致,编辑器通常也会给出报错。
- 🍔一行代码末尾的分号(;)是什么?
这是照顾小白参赛选手的一个汉堡🍔,C#、C/C++代码中,分号(;)就和写句子类似,表示一句话结束了,是语句结束的标志。忘记加分号时VS一般会给出提示,这是初学者经常容易忽略的一个小问题。
- 🍔为什么我明明加了分号(;)可为什么还给我报错呀😭?
请检查你的分号是中文;还是英文;,需要注意的是:在你开始写学写代码以后,就要有中文符号和英文符号的意识啦,所有的代码中,都使用的是英文符号(当然字符串里的内容除外)。
在中文输入法状态下,使用快捷键【Ctrl+。】应该是可以切换中英文符号的。
- 🍔大括号是什么?
大括号就可以理解为段落,实际上是代码块。**多个语句就组成一个代码块,多个代码块就组成一份源代码(句子组成段落、段落组成文章)。**在编程中,一个类、一个函数、一个for循环、一个if的条件分支…会出现多语句的地方,就会有大括号,这需要读者多看多写,寻找感觉。
- 🍔缩进很重要吗?
你如果注重代码颜值,那么它就重要😂。
在C#、C/C++这些以大括号为为代码段标志的编程语言中以及Matlab以end为段落结束标志的编程语言里,缩进并不是显得特别重要,仅仅是增加代码的可读性、舒适整洁!看着舒服!
但是,在Python以缩进为代码段的编程语言中,缩进就尤为重要:你敢乱缩进,我就敢报错给你看,你糊弄我我就糊弄你🤡。
🌴面向过程和面向对象
对于未曾了解过编程的读者来说,可能是第一次听说面向对象这个概念,对于有一些编程经验的读者来说,可能听说过:程序员没对象的会给自己new几个对象?😅、类、封装、继承和多态的概念。笔者作为一名测绘仔,对面向过程和面向对象也仅仅是停留在表面理解。
按笔者的认识:面向过程和面向对象就是两种解决问题的不同思维方式,面向过程以过程为中心,更适合一些简单的问题、按照设计流程去解决问题;面向对象以对象为中心,更适合一些复杂的问题,将复杂问题简单化。
📜解决Word排版问题
例如:笔者现在有一篇论文需要用Word排版。
- 面向过程思维
参加数学建模之前,笔者Word功底比较差,没办法技术不够努力来凑:笔者会从论文开始阅读论文,遇到标题,选中它,按照标题的要求设置字体字号行间距;遇到正文段落,选中它,按照正文的要求设置字体字号行间距;遇到表格,选中它,按照表格的要求设置表格的字体字号边框等等。这种完全按照某个过程来解决问题的思维就是一种面向过程思维。
- 面向对象思维
后面努力学习了Word样式排版之后:笔者会先按照各种要求设计出一些样式:一级标题、二级标题、正文、表格、列表等等,随后还是从头开始阅读,这次便不一样啦:笔者遇见标题就给应用对应的标题样式、遇见正文应用正文样式,甚至笔者还会用F4快捷键重复上一步加速排版😆,而且当要求发生变化时,笔者可以很轻松的进行修改。这就有些面向对象的思维方式:先做好工具、再重复使用、避免重复造轮子。
🎬王者荣耀冷知识
举例Word排版可能不够形象,笔者再拿王者荣耀的英雄来简单举一个例子吧。
如果读者在微信后台给笔者留言咨询问题时笔者没有及时回复,那多半笔者是去王者峡谷遛弯儿去了(bushi😂):一场克隆大战一触即发,我方5个露娜,敌方5个后羿,仔细观察露娜这个英雄:她有三个技能(函数)、血条(变量)、蓝条(变量)、经验条(变量)、等级(变量)…在游戏中还分玩家1到玩家4+笔者的(.)露娜,作为王者荣耀底层设计者,肯定不会给这么多东西柔在一起,于是有了类:将这么多露娜做成一个类——英雄露娜,再产生对象:玩家1的露娜…笔者的露娜,每一个实例对象都有自己的属性变量(血条、蓝条…)和操作函数(三个技能…),这就是面向对象,将数据变量和操作函数结合在一起。
🌸MFC、WinForm和WPF
MFC(Microsoft Foundation Classes)、WinForm(Windows Form)和WPF(Windows Presentation Foundation)都是属于开发窗体应用程序的一种框架,在这些框架上开发窗体应用程序会非常地简单、高效。需要注意的是:MFC基于C++编程语言,而WinForm和WPF基于C#编程语言。
🧀C++ MFC
笔者最初接触C++ MFC为《计算机图形学》课上了解一二,具体细节开发咳咳~大家还是看看图吧😐笔者不是很会MFC,学习难度不好评价🤣
🍞C# WinForm
C# WinForm是测绘程序大赛选择最多的界面方式,网上代码教程也非常的多,上手也十分简单:ppt拖拽式界面布局有鼠标就行哈哈哈哈比赛别忘记带鼠标~
🧇C# WPF
WPF是现代一种主流的界面开发方式,界面采用xaml语言进行编写(有些像html),但是其学习有曲线、对初学者并不是特别友好。
❓为什么选择WinForm参加比赛?
没有为什么,简单易上手、速度快、好拿时间分🤣十分钟就可以搭建一个很精美简洁完善的界面然后有机会去冲击特等奖,为什么要花更多的时间去做与比赛无关的东西呢?(如果不是比赛用时分占20%,笔者可能会更倾向于WPF哈哈哈)
🌹结语
-
笔者仅结合自己的学习经验来进行分享,所学不足之处,望批评指正~
-
虽然比赛选择的是WinForm,并不代表MFC和WPF就不好,存在即合理,只是说WinForm更适合用来参赛~
-
文章举例也仅仅是用来加深读者的印象,并非实际编程所需要~
-
笔者为测绘遥感方向的学习者,愿意结交志同道合的伙伴,欢迎关注公众号与笔者一起交流学习~
-
路虽远,行则将至;事虽难,做则必成。希望认真学习的你能够有所收获~
-
本公众号的原创成果,在未经允许的情况下,请勿用于任何商业用途!
-
如果本文有幸可以帮到您,欢迎您的点赞👍、收藏⭐与关注❤;您的点赞👍、收藏⭐与关注❤是我创作的最大动力~