如何优雅的写C#,使用Visual studio

news2024/11/18 11:33:51

免责声明

本人接触C#,.Net一年时间,本文内容基于我平时对于C#语法的积累,如有问题请多包涵。以下内容除了C#之外,还有Visual studio编译器相关的内容。

在使用C#的一年多里面,我发现C#的语法糖真的很不错,Visual Studio也有些不错的功能,这里给大家总结一下。

瞎写个字当封面。
在这里插入图片描述

声明变量,使用变量

C#定义变量的时候使用{get;set;}语法。
get,set语法介绍

    public class MenuBar
    {

        public string? Icon { get; set; }


        public string? Title { get; set; }   


        public string? NameSpace { get; set; }

    }

这个用来干什么呢?简单来说就是C#帮你把数据封装好了。

声明变量,我们可以New 变量名(){添加对应参数};

new MemoItem() { Title = "Memo标题" , Content = "MemoContent"}

这样优点是我们可以不用写多个创建函数。

优雅,实在是太优雅了!——我

添加注释

在Visual studio 里面添加C#注释,我们可以通过添加"///"来添加注释,会自动注解代码

在这里插入图片描述
添加注释鼠标悬停也会显示对应的注释

在这里插入图片描述
也可以添加 #注释来实现代码管理功能。例如 #region和#endregion 来折叠代码

在这里插入图片描述
每一个不写注释的代码,都是对程序的辜负。——尼采

字符串操作

在这里你可以看到C#很好的使用了ES6的语法,学过前端的朋友们会比较了解。

“@”,强字符串定义:里面特殊字符没有任何含义

例如:下面这句话不会被报错
在这里插入图片描述
“$”,模板字符串,类似于ES6里面``。但是我感觉比这个写起来更舒服,

`${变量1}${变量2}`\\ES6
$"{变量1},{变量2}"\\C#

注意:C#使用$“{{}}“来转义”{}”
终于长字符拼接不用多个""来连接变量了。

微软说要使用ES6语法,C#便有了ES6语法——旧约·创世纪

NuGet库

java有Maven仓库,Vue有npm,React有yarn,Python有pip。C#也有自己的仓库NuGet

NuGet上面有很多很好的库,很多都是从Java生态里面移植过来的,比如NLog,NPOI,也有很多是微软自己开发的库。好用的第三方库和国产的库也很多

在这里插入图片描述
在这里插入图片描述

我逛了一晚上NuGet库,不是因为我逛完了,而是因为天亮了——麦克阿瑟

使用迭代器

上文说道C#很多语法类似于ES6语法,当然前端最舒服的迭代器C#也有,C#里面叫做action
在这里插入图片描述
List可以使用

  • ForEach:遍历
  • Sort:比较
  • Where:查询

但是遍历器没有JS里面那么多,JS里面还有Map,Filter迭代器,当然使用Where已经可以实现Map,Filter的功能了。

C#语法,多看一眼就会爆炸,再学一点就会融化。——蔡徐坤

连接数据库

这里要讲到.NET技术。如果说java是被springboot高度绑定的技术,那么C#就是和.NET高度绑定。.NET在国内知名度很小,这里不多介绍。
.NET 拥有一个叫EF技术,全面叫做EntityFramework,是一个ORM数据库模型。简单来说就是把常用的Sql语句,封装成方法,而且使用缓存追踪技术。在你修改该值时,缓存中的内容也会被修改。
如图
在这里插入图片描述

查询数据
外部修改
缓存追踪+保存缓存
EF
类实体
新的实体
存到数据库

并且在生成.NET实体模型的时候,也会把数据库对象代码自动生成。简单来说就不用一点一点去新建数据库对应的实体类,并且还要仔细观察对象名称是否拼写错误。

世界上没有完美的语言,也没有完美的框架,只有最适合的工具。——丘吉尔

执行异步

C#引入了 asunc和await语法,使得异步代码更舒服的阅读,更适合人的理解方式。其实前端的ES6也使用asncy和await进行异步的操作。
伪代码简单介绍

async,await和Thread的区别

世上只有一种异步函数,就是在认清线程的真相之后合理控制线程——罗曼罗兰

多返回值,多重载

C#通过使用ref和out修饰词来对参数进行赋值,有点类似于指针的感觉,通过ref和out来解决多返回值的问题。
简单来说
伪代码:


public void Test(res num1,out num2);
int num1;
int num2;

Test(num1,num2)
//你在里面进行的所有操作,num1和num2都会保留。
//这样变解决了多返回值的问题

ref和out简介

通过在函数里面定义时进行赋值,可以轻松定义多个重载函数,注意:赋值的参数要放在函数的末尾

static void Main(string[] args)
{

    Test(1);//1+3 = 4
    Test(1,2);//1+2 = 3
}


public static int Test(int num1 ,int num2 = 3)
{
    return num1 + num2;
}

函数是一座围城,城外的变量想进去,城里的变量想出来。——钱钟书《围城》

IntelliSense,智能代码提示

Visual Studio有智能代码提示,和平常的代码补全不一样,Visual studio 会根据你写的代码自动猜你之后要写的代码。
灰色的就是自动提示的"int num3 = 3"
在这里插入图片描述

代码补全不值一提,我必须达到——完美。——英雄联盟,烬
提示:Viusal studio代码补全快捷键:ctrl+j
visual studio开启自动补全:
在这里插入图片描述

在这里插入图片描述
这样没有引入的命名空间的类也会被提示。之前没有提示实在太蛋疼了。

结尾

这就是我一年用C#以来的总结。当然C#还有委托,反射,泛型等很优秀的设计。但是由于这些有点难度,自己掌握的不清楚,就不在这里描述了。C#还是有很多优点的,但是就是和java生态位重叠太厉害了。国内还是以java为主流。这里小弟就抛砖引玉,希望大佬能补充C#比较舒服的语法糖或者Visual studio比较好用的功能。

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

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

相关文章

SaaS系统用户权限设计

SaaS系统用户权限设计 学习目标: 理解RBAC模型的基本概念及设计思路 了解SAAS-HRM中权限控制的需求及表结构分析完成组织机构的基本CRUD操作 完成用户管理的基本CRUD操作完成角色管理的基本CRUD操作 组织机构管理 需求分析 需求分析 实现企业组织结构管理&#xff0…

PCB 基础~典型的PCB设计流程,典型的PCB制造流程

典型的PCB设计流程 典型的PCB制造流程 • 从客户手中拿到Gerber, Drill以及其它PCB相关文件 • 准备PCB基片和薄片 – 铜箔的底片会被粘合在基材上 • 内层图像蚀刻 – 抗腐蚀的化学药水会涂在需要保留的铜箔上(例如走线和过孔) – 其他药水…

如何封装React无限滚动加载列表组件【含源码】

前言 由于需要考虑后端接口的性能问题,我们在请求业务数据列表的时候并不能直接请求全量数据。所以我们在请求数据时常见的方式是做分页查询。 对于前端交互而言,我们需要考虑如何优雅的让用户触发请求下一页数据的接口。常用的方法有两种:…

i春秋春季赛2023

只有两道逆向和一道misc,其他的有时间再写 wordle 不断筛有什么和没什么字母猜就行了 [6x] Guess a 5-letter word : first first [5x] Guess a 5-letter word : ideas Please enter a real English word that exists. [5x] Guess a 5-letter word : icily first…

View的基础与滑动

View的基础与滑动 1.View的基础知识 1.1View是什么 View是一种界面层的控件的一种抽象 ,我们知道的大多数控件都是直接或间接继承自View 如EditText,TextView等等 注意: EditText在compose中并没有相关控件,而是通过TextField来进行组合 Android中View本身就可以是单个控…

rt-thread启动流程(最详细教程)

资料下载 RT-Thread Simulator 例程 操作流程 将上面的仿真例程下载并解压,通过MDK打开,编译,调试,并打开串口点击运行,就可以看到如下输出了: 添加自己的 thread:在main()函数中添加即可&am…

【5.19】四、性能测试—流程

4.4 性能测试的流程 性能测试也遵循测试需求分析→测试计划制订→测试用例设计→测试执行→编写测试报告的基本过程,但在实现细节上,性能测试有单独一套流程: 1. 分析性能测试需求 在性能测试需求分析阶段,测试人员需要收集有关…

【AI Earth试玩】权限配置与openAPI调用工具库

前言 AI earth是阿里达摩院出的遥感云计算平台,我简单体验下来感觉像是GEE的python版本遥感深度学习计算平台,整体体验还是挺不错的,尤其是多分类的结果还是挺惊艳的。 平台提供工具箱和notebook两种模式,工具箱整个交互简单易用…

DJ 5-4 以太网 Ethernet

目录 一、以太网的物理拓扑结构 二、以太网物理层标准 1、以太网技术:10Base-T 和 100Base-T 2、以太网技术:1000Base 系列 3、曼彻斯特编码* 4、差分曼彻斯特编码机制* 三、以太网链路层控制技术 四、以太网的帧结构 1、前同步码 2、MAC 地址…

Spring Boot 项目【前后端分离】之后端实现加 LambdaQueryWrapper实现源码分析和手动模拟

目录 Spring Boot 项目【前后端分离】 之架子搭建 技术栈 实现功能03-创建Spring Boot 后端项目 需求分析/图解 思路分析 代码实现 1. 创建springboot_furn 项目 2. 修改pom.xml , 引入mybatis-plus 等相关依赖 3. 创建application.yml 配置port & 配置DB 连接信息…

【数据结构】KMP算法:计算next与nextval函数值(图解)

例&#xff1a;计算模式串"abaabcac"的KMP算法中next函数值 由函数定义 n e x t [ j ] { 0 , j 1 M a x { k ∣ 1 < k < j 且 " t 1 t 2 ⋅ ⋅ ⋅ t k − 1 " " t j − k 1 t j − k 2 ⋅ ⋅ ⋅ t j − 1 " } 1 , k 1 next[j]\left…

asp.net高校运动会管理系统的设计与实现

本高校运动会管理系统是针对我院当前运动会工作需要而开发的B/S模式的网络系统&#xff0c;涉及到运动会赛前的报名录入准备与分组编排、赛中的成绩处理、赛后的成绩汇总与团体总分的统计。它将是一个完整统一、技术先进、高效稳定、安全可靠的基于Internet/Intranet的高校运动…

一、Git安装(Git+TortoiseGit图形化)

Git 是一个开源的分布式版本控制系统&#xff0c;用于敏捷高效地处理任何或小或大的项目。 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。 Git 与常用的版本控制工具 CVS, Subversion 等不同&#xff0c;它采用了分布式版本库的方式…

《计算机网络—自顶向下方法》 Wireshark实验(八):ICMP 协议分析

ICMP&#xff08;Internet Control Message Protocol&#xff09;网络控制报文协议。它是 TCP/IP 协议簇的一个子协议&#xff0c;用于在 IP 主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户…

进程概念

目录 冯诺依曼体系结构 操作系统OS 系统调用和库函数概念 进程 task_struct内容分类 组织进程 初识fork 进程状态 Z(zombie)-僵尸进程 孤儿进程 进程优先级 环境变量 和环境变量相关的命令 环境变量的组织方式 程序地址空间 冯诺依曼体系结构 关于冯诺依曼&…

Linux 防火墙 iptables

iptables概述 Linux 系统的防火墙 &#xff1a;IP信息包过滤系统&#xff0c;它实际上由两个组件netfilter 和 iptables组成。 主要工作在网络层&#xff0c;针对IP数据包。体现在对包内的IP地址、端口、协议等信息的处理上。 iptables是Linux系统防火墙的一种&#xff0c;是Ce…

SpringBoot【开发实用篇】---- 整合第三方技术(消息)

SpringBoot【开发实用篇】---- 整合第三方技术&#xff08;消息&#xff09; 消息的概念Java处理消息的标准规范JMSAMQPMQTTKafka 购物订单发送手机短信案例订单业务短息处理业务 SpringBoot整合ActiveMQ安装整合 SpringBoot整合RabbitMQ安装整合&#xff08;direct模型&#x…

【操作系统复习】第7章 输入/输出系统1

I/O系统管理的主要对象 ➢ I/O设备和对应的设备控制器 I/O系统的主要任务 ➢ 完成用户提出的I/O请求 ➢ 提高I/O速率 ➢ 改善I/O设备的利用率 I/O系统的上、下接口 ➢ I/O系统接口&#xff08;上接口&#xff09; ➢ 软件/硬件接口&#xff08;下接口&#xff09…

实验三 传感器目标识别

【实验目的】 1、了解环境感知传感器目标识别的目的和方法&#xff0c; 掌握MATLAB中的目标检测方法。 2、了解MATLAB的目标检测器和检测函数&#xff0c;掌握车辆识别、行人识别、交通标志识别和道路识别等目标识别方法。 【实验性质】 验证性实验。 【实验要求】 MATLAB 202…

Kubernetes实战入门

文章目录 一、组件介绍&#xff08;一&#xff09;master主控节点&#xff08;二&#xff09;node工作节点 二、k8s核心概念&#xff08;一&#xff09;pod&#xff08;二&#xff09;controller&#xff08;三&#xff09;service 三、搭建k8s集群&#xff08;一&#xff09;基…