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

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


  根据笔者经验,分享了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.mzph.cn/pingmian/51984.shtml

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

相关文章

海外媒体投稿:怎样在法国媒体发稿宣传中获得成功

法国是一个充满机遇的销售市场,而媒体发稿营销推广是企业在法国市场里扩张曝光度和提升知名度的有效途径。下面我们就共享如何运用低投资得到高收益的办法,帮助企业在法国媒体发稿推广过程中获得成功。 第一步:掌握目标群体在进行法国媒体发稿…

AI时代来临:数字人主播,虚拟代言人正颠覆行业!

数字人主播、虚拟代言人……你的身边有“数字同事”了吗?近年来,越来越多的数字人开始活跃在各个行业,承担起直播带货、知识讲解、新闻播报和品牌代言等任务。就在刚刚过去的五一假期,当大多数人还在休息时,不少数字人…

RongCallKit iOS 端本地私有 pod 方案

RongCallKit iOS 端本地私有 pod 方案 需求背景 适用于源码集成 CallKit 时,使用 pod 管理 RTC framework 以及源码。集成 CallKit 时,需要定制化修改 CallKit 的样式以及部分 UI 功能。适用于 CallKit 源码 Debug 调试便于定位相关问题。 解决方案 从…

某系统存在任意账户凭据窃取漏洞

世人都晓神仙好,惟有功名忘不了!古今将相今何在?荒冢一堆草没了。 漏洞描述 某系统存在任意账户凭据窃取漏洞,攻击者使用任意账号登录后访问特殊的Url即可获取所有用户的账号和密码 漏洞复现 登录后台(存在访客用户默认账号密…

【原创】java+swing+mysql房屋租赁管理系统设计与实现

个人主页:程序员杨工 个人简介:从事软件开发多年,前后端均有涉猎,具有丰富的开发经验 博客内容:全栈开发,分享Java、Python、Php、小程序、前后端、数据库经验和实战 文末有本人名片,希望和大家…

听专家的,不如听国家的,网络安全究竟值不值得报?

考学选专业,或者跳槽选行业的,看这篇! 如果你什么都不懂,家里也没有矿,那就紧跟国家大事和地方政策。 关于网络安全专业究竟是否值得报考? 要知道“二十大”、“十四五”等大会一直在提一个词叫做“数字中国建设”…

Linux:进程的概念,进程相关函数

一、进程的概念 1.进程 进程是系统进行资源分配和调度的一个独立单元,它是操作系统结构的基础。进程是程序的一次执行过程,包含了程序代码、当前活动、系统资源(如CPU、内存、文件等)的使用情况等信息。每个进程都有自己独立的内…

DevOps入门(上)

1: DevOps概念 DevOps: Development 和 Operations 的组合 DevOps 看作开发(软件工程)、技术运营和质量保障(QA)三者的交集。 突出重视软件开发人员和运维人员的沟通合作,通过自动化流程来使…

React学习笔记(一)——react基础

目录 1. React 介绍 1.1 React是什么 1.2 React的优势 1.3 React的市场情况 2. 开发环境搭建 2.1 使用create-react-app快速搭建开发环境 2.2 react 项目文件说明 2.3 index.js项目入口文件 2.4 App.js 项目根组件 2.5 react 调试工具安装 3. JSX基础-概念和本质 3…

代驾系统源码开发中的用户体验优化:从设计到实现的全方位解析

在当今数字化时代,代驾服务已经成为城市生活中不可或缺的一部分。为了帮助开发者和企业快速搭建代驾服务平台,许多开源的代驾系统源码应运而生。这些源码不仅节省了开发时间,还为进一步的定制化开发提供了坚实的基础。本文将以“开源代驾系统…

docker 安装 oracle11g

#创建oracle11g docker run -d --name myoracle11g -p 1522:1521 akaiot/oracle_11g #登录到oracle,要先docker ps 查看具体的docker id docker exec -it 22222222 bash su root 密码:helowin # 设置环境变量 vi /etc/profile export ORACLE_HOME/home/oracle/ap…

Dubbo源码深度解析(七)

接上一篇博客《Dubbo源码深度解析(六)》,上篇博客主要从服务消费方开始讲起,主要讲:如果类中的属性或者方法,如果被DubboReference注解所修饰,Dubbo是怎么处理的,处理逻辑类似Spring框架提供的Autowired注解…

tomcat相关

一、部署安装tomcat 在10和20上安装tomcat [root10 ~]# dnf install java-1.8.0-openjdk.x86_64 -y #安装java环境 [root10 ~]# tar zxf apache-tomcat-9.0.93.tar.gz -C /usr/local/ #安装并启动tomcat [root10 ~]# ln -s /usr/local/apache-tomcat-9.0.93/ /usr/local/tomcat…

NC 完全二叉树结点数

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 描述 给定一棵完全…

社交巨头的下一步:Facebook的未来发展方向

作为全球最大的社交媒体平台之一,Facebook(现Meta)一直在不断推动其平台的技术创新和战略调整,以适应不断变化的市场需求和用户期望。随着技术的进步和社交媒体环境的演变,Facebook的未来发展方向正在显现出新的趋势和…

DC-DC 转换器中的压电谐振器:当前状态和限制

在小体积和高频下提高功率密度并减小电感器和变压器的尺寸是DC-DC转换器设计中的一大挑战。为了克服这些困难,压电谐振器(PR)通过利用潜在的压电效应,以振动模式而不是电模式存储能量。 即使 PR 的使用在效率和功率密度方面改进了…

轻松创作高质量的AI音乐——Suno API

Suno 歌曲生成 API 对接指南 随着人工智能技术的飞速发展,各类 AI 程序已如雨后春笋般涌现。AI 不再是遥不可及的存在,它的身影深入了人类工作与生活的每一个角落。其应用领域也愈加广泛,从初期的写作,到现如今的医疗、教育&…

【数据结构-距离和】力扣2602. 使数组元素全部相等的最少操作次数

给你一个正整数数组 nums 。 同时给你一个长度为 m 的整数数组 queries 。第 i 个查询中,你需要将 nums 中所有元素变成 queries[i] 。你可以执行以下操作 任意 次: 将数组里一个元素 增大 或者 减小 1 。 请你返回一个长度为 m 的数组 answer &#x…

WUP-MY-LABEL-PRINTER 旻佑热敏打印机标签打印uniapp插件使用说明

插件地址:WUP-MY-LABEL-PRINTER 旻佑热敏打印机标签打印安卓库 简介 本插件主要用于旻佑热敏打印机打印标签,不支持票据打印。适用于旻佑的各型支持标签打印的热敏打印机。本插件开发时使用的打印机型号为MY-805嵌入式面板打印机,其他型号请…

C的动态内存管理 free()和malloc()的简单实现——free()根据内存地址便知释放内存的空间大小(原理详解)

malloc与free malloc 分配的内存是未初始化的,其中的字节内容是不确定的(可能是随机值)。 如果内存分配失败,malloc 返回一个空指针 NULL,可以通过检查返回值来判断是否分配成功。 void* malloc (size_t size); cal…