0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C# 用来开发上位机挺舒服

STM32嵌入式开发 来源:STM32嵌入式 作者:沈丹 2021-06-27 10:31 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

作为嵌入式开发者,已经熟悉了C语言跟VS。推荐你也了解下C#,用来开发上位机挺舒服。如果你仔细与其它语言比较,就会感觉到很香。

C#良好兼容了值类型、引用类型,在发展中逐步解决了其他高级语言没解决好的问题。很好的总结了前人的经验,在基础语法上就区分了值类型和引用类型。对初次接触编程的同学来说这一点容易造成学习障碍,但是只要掌握了它,就会给实际工作带来极大便利。

反观历史,C#也曾经因为“值类型/引用类型”饱受诟病,“拆箱”和“装箱”一直是个招黑的设计。但后来我们看到,随着泛型的成熟和普及,随着泛型容器代替通用容器,装箱和拆箱的问题已经在很大程度上解决了。

还有对异步的支持等等,C#的设计最初带来了一些问题,但是最终还是交上了一份满意的答卷。

充分利用栈空间,非常高效,做了一部分C/C++擅长的事。

值类型有一大特点,就是能充分利用栈空间。高级语言的GC特性一直饱受诟病,但下面的Unity常见代码,运行时没有GC:

// 通过输入的三维向量,移动物体的位置void Move(Vector3 input){// 演示代码,有意分成很多行 input = input.normalized; Vector3 move = input * 2.0f; move *= Time.deltaTime. transform.position += move; }

这段代码没有在堆上分配空间,你所看到的操作全都是在栈上进行的,GC压力为0。我认为这是C#最令人惊艳的一点。

一般来说数组长度较长,默认分配在堆上。但是C#也提供了便利的语法,在栈上分配数组,对项目后期优化来说简直是神技:

public void unsafe foo(){int* bar = stackalloc int [10];}

没错,C#依然保留了指针,但一般仅用于局部的unsafe代码。在局部热点可以完全解放性能。

良好的语法设计和库函数设计,引导程序员写出更快且更自然的代码。

C#中最常用的容器List,也具有一些良好的设计,当然其它语言也有类似的优点:

// 新建一个list,长度为0。但在堆中预留10万个位置 List《int》 list = new List《int》(100000);// 加入很多元素,由于容量足够没有GCfor (int i=0; i《89000; i++) {list.Add(i); }// 用过以后清空list,长度变成0list.Clear();// 但容量还是10万,继续增加元素还是没有GCfor (int i = 0; i 《 99000; i++) {list.Add(i); }

list在预留空间充足时,添加元素不会产生GC。而且List和值类型结合使用,在内存占用上也有优势。当然,很多其它语言也有类似的设计,可以说别的语言做的好的部分,C#做的也一样好。

继承、泛型、接口、类型约束等等高级特性,都有着良好且自洽的设计。

最初接触C#的时候,看看int的原型,收获很大:

public struct Int32 : IFormattable, IConvertible, IComparable, IComparable《Int32》, IEquatable《Int32》 {// 。..。 }

熟悉C++的人,经过思考,可以很好的理解IComparable、IEquatable以及它们的泛型形式。同时也能猜出“Interface”的概念。思考C#的底层设计,给人的感觉就是自然、规范、恰到好处。

总之,C#语言及其标准库的设计,非常值得借鉴和推崇。

C#的良好设计让它有着越来越广泛的应用。有C语言基础的朋友可以快速上手C#,适合开发单片机的上位机。

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5210

    文章

    20726

    浏览量

    338079
  • C语言
    +关注

    关注

    183

    文章

    7649

    浏览量

    146292
  • 代码
    +关注

    关注

    30

    文章

    4981

    浏览量

    74483

原文标题:用C#开发上位机挺舒服,文末送资料

文章出处:【微信号:c-stm32,微信公众号:STM32嵌入式开发】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    教你如何下载广成科技CAN盒驱动和上位软件

    上位
    jf_68098288
    发布于 :2026年04月23日 14:19:32

    C#运动控制开源(一): CAD导图和小线段速度前瞻的优化之CAD导图

    C#实现CAD解析及如何对小线段轨迹进行运动前瞻
    的头像 发表于 04-02 14:33 1576次阅读
    <b class='flag-5'>C#</b>运动控制开源(一): CAD导图和小线段速度前瞻的优化之CAD导图

    不懂编程,怎么搞定电子仪表上位软件?零代码搞定上位软件开发

    “不懂编程,怎么搞定电子仪表上位软件?”这是很多电子仪表用户的共同困惑。传统上位开发被“专业编程”门槛牢牢限制,即便你对测试需求了如指掌
    的头像 发表于 01-27 17:19 806次阅读
    不懂编程,怎么搞定电子仪表<b class='flag-5'>上位</b><b class='flag-5'>机</b>软件?零代码搞定<b class='flag-5'>上位</b><b class='flag-5'>机</b>软件<b class='flag-5'>开发</b>

    上位掉线检测问题分析

    在工业自动化控制系统中,上位与下位(如PLC、单片等)之间的通信稳定性至关重要。上位掉线
    的头像 发表于 01-13 07:40 733次阅读

    C#上位实战开发指南

    电子发烧友网站提供《C#上位实战开发指南.pdf》资料免费下载
    发表于 01-11 17:15 7次下载

    STM32H5开发陀螺仪LSM6DSV16X(5)----上报匿名上位

    本文介绍了如何将 LSM6DSV16X 传感器的姿态数据通过匿名通信协议上报到上位。通过获取传感器的四元数数据,并将其转换为欧拉角(Roll、Pitch、Yaw),然后按照协议格式化数据帧并通过
    的头像 发表于 12-30 17:06 4604次阅读
    STM32H5<b class='flag-5'>开发</b>陀螺仪LSM6DSV16X(5)----上报匿名<b class='flag-5'>上位</b><b class='flag-5'>机</b>

    AI智能体开发C#软件的临时方案

    AI智能体 (Agent) 可以帮你生成完整的C# 工程,包括主体代码、WinForm界面设计和引用添加。但是目前Visual Studio (VS) 的Agent功能好像还不太完善,时常出一些奇怪
    的头像 发表于 12-30 10:50 1059次阅读
    AI智能体<b class='flag-5'>开发</b><b class='flag-5'>C#</b>软件的临时方案

    求助:CS32L015 开发资料

    你好!可以将 CS32L015 的相关资料 ( 用户手册、Pack包、屏幕开发上位和keil对应工程demo、IAP升级Boot和APP工程发送到 ) 发送到邮箱:1183218869@qq.com吗?非常感谢!
    发表于 12-02 15:58

    上位程序编写

    =serial.readAll();读取串口信息 在硬件连接正确,软件工作正常的情况下,定位模块将接收到的信息通过串口发送给DDR200T开发板,随后蜂鸟处理器将通过开发板上的串口将信息发送给计算机,计算机上的上位
    发表于 10-28 06:40

    S7通信稳不稳?避开这些上位开发常见雷区是关键!

    上位使用S7通信涉及诸多要点,稍不注意就容易踩坑。今天,我们就来详细剖析那些最常见的‘雷区’。 一、连接类型设置 以C#上位使用Shar
    的头像 发表于 08-08 15:03 1218次阅读
    S7通信稳不稳?避开这些<b class='flag-5'>上位</b><b class='flag-5'>机</b><b class='flag-5'>开发</b>常见雷区是关键!

    C#上位与运动控制卡网络通讯的周期上报

    使用C#上位编程实现运动控制卡网络通讯的周期上报功能
    的头像 发表于 06-26 13:59 1061次阅读
    <b class='flag-5'>C#</b><b class='flag-5'>上位</b><b class='flag-5'>机</b>与运动控制卡网络通讯的周期上报

    下位CY7C68013A发送数据,上位C#读取数据,510字节一帧,会丢帧或者帧内错位是怎么回事?

    下位CY7C68013A发送数据,上位C#在1个while循环内不断地读取数据,510字节1帧,1秒333帧、1秒667帧、1秒1333
    发表于 05-30 07:43

    上位和下位是什么关系

    上位和下位在工业自动化、仪器仪表等控制领域中是相互协作、紧密配合的关系,以下从定义、通信方式、功能分工、协同作用几个方面详细阐述它们的关系: 定义与角色 上位
    的头像 发表于 05-29 18:03 2022次阅读

    如何用QT开发一个USB3.0上位

    如何用QT开发一个USB3.0上位
    发表于 05-21 06:54