测绘程序设计|初识C#编程语言|C#源码结构|面向对象|MFC、WinFrom与WPF

news2024/11/24 1:42:18

由于微信公众号改变了推送规则,为了每次新的推送可以在第一时间出现在您的订阅列表中,记得将本公众号设为星标或置顶喔~


  根据笔者经验,分享了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#也是一门不断成长的编程语言:C#获得TIOBE2023年年度编程语言奖,TIOBE 软件公司首席执行官 Paul Jansen 表示,“二十多年来,C# 一直稳居前十名,如今,它正在追赶 Python、C、C++、Java 四大语言的脚步,成为一年内涨幅最大的语言(+1.43%),赢得了当之无愧的奖项。”

C# 荣获2023年年度编程语言奖

  C#的应用场景也非常的广阔:游戏开发(Unity引擎)、Web开发、后端开发、桌面应用开发以及一些嵌入式设备、工业上位机(工业监控与控制系统)等等。因为搭建界面的成本低、开发效率高,所以也深受开发者的喜欢。

🌱C#程序结构

  C#是纯面向对象的语言,源码文件中会有命名空间、类、函数等概念,C#和C/C++语言一样,控制台应用程序都是从主函数(Main)开始执行的,一个项目里面只允许有一个主函数(Main)。

C#的源码文件程序结构

🛴教室的桌椅

  通过教室的桌椅来类比C#的程序结构,可能会加深记忆:1教101教室就是一个命名空间,在这个命名空间里面有桌子、椅子、黑板、灯…等等组成若干个,具体到第一组第一排的桌子就是一个对象,桌子有颜色、有高度、宽度就是桌子的属性变量,桌子具有存放东西的功能就是其操作函数

通过教室桌椅理解C#程序结构

🍔🍔🍔🍔🍔

  实在想不起来该小节该怎么命名了,就请读者吃五个汉堡🍔吧🤣。

  1. 🍔什么是命名空间?

  按照教室的桌椅的类比,命名空间就是程序代码的一种组织形式:101教室的桌子和102教室的桌子能一样吗😂?在Java编程语言中,一个命名空间通常会对应一个文件夹、如果代码文件存放的文件夹与代码内部的命名空间不一致,编辑器通常也会给出报错。

  1. 🍔一行代码末尾的分号(;)是什么?

  这是照顾小白参赛选手的一个汉堡🍔,C#、C/C++代码中,分号(;)就和写句子类似,表示一句话结束了,是语句结束的标志。忘记加分号时VS一般会给出提示,这是初学者经常容易忽略的一个小问题。

  1. 🍔为什么我明明加了分号(;)可为什么还给我报错呀😭?

  请检查你的分号是中文;还是英文;,需要注意的是:在你开始写学写代码以后,就要有中文符号和英文符号的意识啦,所有的代码中,都使用的是英文符号(当然字符串里的内容除外)。

  在中文输入法状态下,使用快捷键【Ctrl+。】应该是可以切换中英文符号的。

  1. 🍔大括号是什么?

  大括号就可以理解为段落,实际上是代码块。**多个语句就组成一个代码块,多个代码块就组成一份源代码(句子组成段落、段落组成文章)。**在编程中,一个类、一个函数、一个for循环、一个if的条件分支…会出现多语句的地方,就会有大括号,这需要读者多看多写,寻找感觉。

  1. 🍔缩进很重要吗?

  你如果注重代码颜值,那么它就重要😂。

  在C#、C/C++这些以大括号为为代码段标志的编程语言中以及Matlab以end为段落结束标志的编程语言里,缩进并不是显得特别重要,仅仅是增加代码的可读性、舒适整洁!看着舒服!

  但是,在Python以缩进为代码段的编程语言中,缩进就尤为重要:你敢乱缩进,我就敢报错给你看,你糊弄我我就糊弄你🤡。

🌴面向过程和面向对象

  对于未曾了解过编程的读者来说,可能是第一次听说面向对象这个概念,对于有一些编程经验的读者来说,可能听说过:程序员没对象的会给自己new几个对象?😅、类、封装、继承和多态的概念。笔者作为一名测绘仔,对面向过程和面向对象也仅仅是停留在表面理解。

  按笔者的认识:面向过程和面向对象就是两种解决问题的不同思维方式,面向过程以过程为中心,更适合一些简单的问题、按照设计流程去解决问题;面向对象以对象为中心,更适合一些复杂的问题,将复杂问题简单化。

📜解决Word排版问题

  例如:笔者现在有一篇论文需要用Word排版。

  1. 面向过程思维

  参加数学建模之前,笔者Word功底比较差,没办法技术不够努力来凑:笔者会从论文开始阅读论文,遇到标题,选中它,按照标题的要求设置字体字号行间距;遇到正文段落,选中它,按照正文的要求设置字体字号行间距;遇到表格,选中它,按照表格的要求设置表格的字体字号边框等等。这种完全按照某个过程来解决问题的思维就是一种面向过程思维

  1. 面向对象思维

  后面努力学习了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,学习难度不好评价🤣

MFC后台代码

MFC后台代码

MFC界面效果

🍞C# WinForm

  C# WinForm是测绘程序大赛选择最多的界面方式,网上代码教程也非常的多,上手也十分简单:ppt拖拽式界面布局有鼠标就行哈哈哈哈比赛别忘记带鼠标~

WinForm窗体搭建

WinForm界面效果

🧇C# WPF

  WPF是现代一种主流的界面开发方式,界面采用xaml语言进行编写(有些像html),但是其学习有曲线、对初学者并不是特别友好。

WPF界面搭建

WPF界面效果

❓为什么选择WinForm参加比赛?

  没有为什么,简单易上手、速度快、好拿时间分🤣十分钟就可以搭建一个很精美简洁完善的界面然后有机会去冲击特等奖,为什么要花更多的时间去做与比赛无关的东西呢?(如果不是比赛用时分占20%,笔者可能会更倾向于WPF哈哈哈)

🌹结语

  1. 笔者仅结合自己的学习经验来进行分享,所学不足之处,望批评指正~

  2. 虽然比赛选择的是WinForm,并不代表MFC和WPF就不好,存在即合理,只是说WinForm更适合用来参赛~

  3. 文章举例也仅仅是用来加深读者的印象,并非实际编程所需要~

  4. 笔者为测绘遥感方向的学习者,愿意结交志同道合的伙伴,欢迎关注公众号与笔者一起交流学习~


  • 路虽远,行则将至;事虽难,做则必成。希望认真学习的你能够有所收获~

  • 本公众号的原创成果,在未经允许的情况下,请勿用于任何商业用途!

  • 如果本文有幸可以帮到您,欢迎您的点赞👍、收藏⭐与关注❤;您的点赞👍、收藏⭐与关注❤是我创作的最大动力~


微信公众号

CSDN博客二维码


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2059118.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微信小程序SSL证书申请重点和方法

微信小程序运行模式主要在手机微信内,这一套程序可以解决了用户注册账户及支付相关问题,另外使用很方便,用户不用特意的去安装小程序,只要在微信里面就可以开发,只因为这样微信小程序很受欢迎。 对于开发者来说&#…

车企数据治理实践:业务场景为抓手势在必行

在这个信息爆炸的时代,数据已经成为推动企业发展的核心动力,而数据治理则是确保数据价值得以最大化发挥的关键。在整车制造的研发、生产及供应链业务中,数据治理扮演着举足轻重的角色。 数据治理对于提升数据质量至关重要。高质量的数据是企…

elemeUI中table的列内容宽度不够时的省略号如何去掉

在外层套个div来解决 <div><el-input-number class"no-ellipsis" style"width: 88px;" size"small" controls-position"right" v-model{scope.row.supplied_area}></el-input-number> </div>

Java中优化大量数据导出到Excel的内存消耗(三):边读边写

优化大量数据导出到Excel的内存消耗&#xff08;二&#xff09;&#xff1a;如果数据超出Excel单表上限&#xff0c;则进行分表_txt导入excel超出最大行如何自动分表-CSDN博客 数据导出进行边读边写excel方式导出 DataSource dataSource dataSourceService.getByDsName(reque…

二手车交易系统功能案例分析

一、系统概述 二手车交易系统旨在连接卖家与买家&#xff0c;提供车辆信息发布、搜索、评估、交易、支付及售后服务等一站式解决方案。该系统需具备高度的可扩展性、稳定性和安全性&#xff0c;以满足日益增长的市场需求。 二、核心功能分析 1. 车辆信息发布与管理 功能描述…

三维坐标的旋转矩阵转换测试Demo(ROS1 RVIZ)

已知空间上的某一个点P在坐标系1下的位置为 P1&#xff08;1,2,3&#xff09;&#xff0c;需要求出P在三维空间坐标系0之间的相对关系&#xff0c;其中坐标系1是相对于坐标系0绕着x轴旋转60度后转化。示意如下图 程序设计 定义P点在坐标系1下的位置 array np.array([1,2,3…

vscode开发android ndk的环境配置

vscode开发android ndk的环境配置 最近公司新需求&#xff0c;要求用C/C实现部分核心代码&#xff0c;打包成静态库跨平台&#xff08;Android和iOS&#xff09;使用。 作为Android开发出身的C/C老白程序员兴奋不已&#xff08;又可以开心的学习niubility的C/C了&#xff09;&…

SpringCloudAlibaba基础七-2 seata的使用

一 Seata 是什么 Seata 是一款开源的分布式事务解决方案&#xff0c;致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和XA 事务模式&#xff0c;为用户打造一站式的分布式解决方案。AT模式是阿里首推的模式,阿里云上有商用版本的GTS&#x…

pycharm创建文件自动生成文件头信息

pycharm创建文件自动生成文件头信息 1、设置步骤 file -> settings->Editor->File and Code Templates->Python Script 2、pycharm预定义的变量&#xff08;小写无效&#xff09; ${PROJECT_NAME}:项目名称${PRODUCT_NAME}:集成开发环境${NAME}:文件名${USER…

高效工作与持续学习:程序员如何平衡成长与编码任务?

在当今瞬息万变的技术世界中&#xff0c;程序员面临着前所未有的挑战和机遇。随着项目复杂性的增加和新技术的层出不穷&#xff0c;如何在繁忙的日常编码任务与自我提升之间找到平衡&#xff0c;已成为许多程序员心中的困惑。这不仅关乎职业生涯的发展&#xff0c;更关系到个人…

Transformer系列-3丨BERT模型和代码解析

1 前言 前面两篇文章&#xff0c;笔者从网络结构和代码实现角度较为深入地和大家解析了Transformer模型和Vision Transformer模型&#xff08;ViT&#xff09;&#xff0c;其具体的链接如下&#xff1a; 基础Transformer解析 ViT模型与代码解析 本期内容&#xff0c;笔者想…

贪心+构造,CF 1592F1 - Alice and Recoloring 1

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 1592F1 - Alice and Recoloring 1 二、解题报告 1、思路分析 操作2、3可以…

C++系列-多态的基本语法

多态的基本语法 多态的含义静态多态动态多态 多态的底层原理多态中的final和overridefinaloverride: 多态的应用和优点计算器简单实现电脑组装的实现 《游山西村》 南宋陆游 莫笑农家腊酒浑&#xff0c;丰年留客足鸡豚。 山重水复疑无路&#xff0c;柳暗花明又一村。 箫鼓追…

leetcode118. 杨辉三角,老题又做

leetcode118. 杨辉三角 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]] 示例 2: 输入: numRows 1…

AI视频创作应用

重磅推荐专栏: 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容(AIGC)技术。通过深入的技术解析和实践经…

appium下载及安装

下载地址&#xff1a;https://github.com/appium/appium-desktop/releases 双击安装就可以

信号的变换

信号的变换 在实践中&#xff0c;缩放和时间平移是遇到的两个最重要的信号变换。缩放改变了振幅轴上的因变量的值&#xff0c;而时间平移则影响了时间轴上的自变量的值。 加法 对于两个离散时间信号的加法&#xff0c;例如 x [ n ] x[n] x[n] 和 y [ n ] y[n] y[n]&#x…

Flutter【02】mobx原理

简介&#xff1a; 概念 MobX 区分了以下几个应用中的概念&#xff1a; State(状态) 状态 是驱动应用的数据。 通常有像待办事项列表这样的领域特定状态&#xff0c;还有像当前已选元素的视图状态。 记住&#xff0c;状态就像是有数据的excel表格。 Derivations(衍生) 任何…

Ps:首选项 - 性能

Ps菜单&#xff1a;编辑/首选项 Edit/Preferences 快捷键&#xff1a;Ctrl K Photoshop 首选项中的“性能” Performance选项卡允许用户通过调整内存使用、GPU 设置、高速缓存设置以及多线程处理等选项&#xff0c;来优化 Photoshop 的性能。这对于处理大文件、复杂图像或需要…