10 个 C# 关键字和功能
在 Stack Overflow 调查中,C# 语言是排名第 5 位的编程语言。它广泛用于创建各种应用程序,范围从桌面到移动设备再到云原生。由于有如此多的语言关键字和功能,对于开发人员来说,要跟上新功能发布的最新信息将是一项艰巨的任务。本文深入探讨了每个 C# 开发人员都应该知道的 10 个 C# 关键字。

1. Async 和 Await
关键词: ,
asyncawait
C# 中引入的 and 关键字使得在 C# 中处理异步编程变得容易。它们允许您编写在不阻塞主线程的情况下执行操作的代码。此功能对于受 I/O 限制或 CPU 密集型的任务特别有用。通过使用这些关键字,程序员可以轻松处理长时间运行的计算操作,例如调用外部 API 来获取数据或从网络驱动器写入或读取。这将有助于开发响应式应用程序,并可以处理并发操作。asyncawait
例
C#
1
public async Task<string> GetDataAsync()
2
{
3using (HttpClient client = new HttpClient())
4{
5string result = await client.GetStringAsync("http://bing.com");
6return result;
7}
8
} 2. LINQ
关键词: , , , , , ,
fromselectwheregroupintoorder byjoin
LINQ(语言集成查询)提供了一种简单的方法,可以直接在 C# 中查询各种数据源,如数据库、集合和 XML,而无需与其他框架(如 ADO.NET 等)交互。通过使用与 SQL 相同的语法,LINQ 使开发人员能够以可读的方式编写查询。
例
C#
1
var query = from student in students
2where student.Age > 18
3orderby student.Name
4select student; 3. 性能
关键词:
property
属性主要是提供灵活机制来读取、写入或计算私有字段值的成员。通常,我们隐藏内部私有支持字段,并通过属性公开它们。这使调用者可以轻松访问数据。在下面的示例中,是隐藏名为 的支持字段的属性,标记为以避免外部调用者直接修改该字段。publicNamenameprivate
例
C#
1
class Person
2
{
3private string name; // backing field
4public string Name // property
5{
6get { return name; }
7set { name = value; }
8}
9
}
1011
class Program
12
{
13static void Main(string[] args)
14
{
15Person P1 = new Person();
16P1.Name = "Sunny";
17Console.WriteLine(myObj.Name);
18}
19
} 4. 泛型
关键词: ,
generic<T>
泛型允许您为类编写代码,而无需指定该类所处理的数据类型。它是一个类,允许用户使用占位符定义类和方法。C#2.0 中泛型的引入彻底改变了创建模块化可重用代码的格局,否则这些代码需要在多个地方复制。想象一下,您正在处理 2 个数字的相加,然后需要添加 s 或数据类型。我们最终创建了相同的重复代码,因为我们已经在方法参数中定义了一个具有数据类型的方法。泛型使定义占位符和处理不同数据类型的逻辑变得容易。intfloatdoubleint
例
C#
1
public class Print
2
{
3// Generic method which can take any datatype as method parameter
4public void Display<T>(T value)
5{
6Console.WriteLine($"The value is: {value}");
7}
8
}
910
public class Program
11
{
12public static void Main(string[] args)
13
{
14Print print = new Print();
1516// Call the generic method with different data types
17print.Display<int>(10);
18print.Display<string>("Hello World");
19print.Display<double>(20.5);
20}
21
} 5. 代表和活动
关键词: ,
delegateevent
委托只不过是一个对象,它引用一个方法,你可以直接通过它来调用,而不直接调用该方法。委托等效于 C++ 中的函数指针。委托是指向任何方法的类型安全指针。委托主要用于实现回调方法和处理事件。 并且是 C# 中开箱即用的内置代表。delegateFunc<T>Action<T>
另一方面,事件使类或对象能够在发生感兴趣的事情时通知其他类或对象。例如,考虑用户单击您网站上的按钮的场景。它生成一个事件(在本例中为按钮单击),由相应的事件处理程序代码处理。
例子
声明和实例化 a 的示例代码:delegate
C#
1
public delegate void MyDelegate1(string msg); // declare a delegate
23
// This method will be pointed to by the delegate
4
public static void PrintMessage(string message)
5
{
6Console.WriteLine(message);
7
}
89
public static void Main(string[] args)
10
{
11// Instantiate the delegate
12MyDelegate1 del = PrintMessage;
1314// Call the method through the delegate
15del("Hello World");
16
}
用于启动事件并通过处理程序处理事件的示例代码:event
C#
1
// Declare a delegate
2
public delegate void Notify();
34
public class ProcessBusinessLogic
5
{
6public event Notify ProcessCompleted; // Declare an event
78public void StartProcess()
9
{
10Console.WriteLine("Process Started!");
11// Some actual work here..
12OnProcessCompleted();
13}
1415// Method to call when the process is completed
16protected virtual void OnProcessCompleted()
17
{
18ProcessCompleted?.Invoke();
19}
20
}
2122
public class Program
23
{
24public static void Main(string[] args)
25
{
26ProcessBusinessLogic bl = new ProcessBusinessLogic();
27bl.ProcessCompleted += bl_ProcessCompleted; // Register event handler
28bl.StartProcess();
29}
3031// Event handler
32public static void bl_ProcessCompleted()
33
{
34Console.WriteLine("Process Completed!");
35}
36
} 6. Lambda 表达式
关键词: ,
lambda=>
Lambda 表达式提供了一种表示方法的简单方法,在 LINQ 查询和定义短内联函数时特别有用。此功能允许开发人员在执行简单操作时消除对传统方法定义的需求,从而编写可读的代码。Lambda 表达式使 Lambda 表达式成为开发人员在使用 C# 时的宝贵工具,从而提高了代码的清晰度和效率。
例
C#
1
Func<int, int, int> add = (x, y) => x + y;
23
int result = add(3, 4); // result is 7 7. 可为 null 的类型
关键词:
?
在 C# 中,可以为 null 的类型也允许值类型具有状态。当您使用可能具有值的数据库或数据源时,这会派上用场。在值类型后添加 a 有助于开发人员处理数据可能丢失或未定义的情况。这样可以防止在代码运行时导致潜在错误。此功能提供了一种清晰直接的方式来处理可选或缺失的数据,从而使应用程序更加可靠。nullnull?
例:
C#
1
int? num = null;
2
if (num.HasValue)
3
{
4Console.WriteLine($"Number: {num.Value}");
5
}
6
else
7
{
8Console.WriteLine("No value assigned.");
9
} 8. 模式匹配
关键词: ,
switchcase
模式匹配是 C# 7.0 中引入的另一个有用功能,然后在该语言的后续版本中进行了一系列改进。模式匹配需要一个表达式,它有助于测试它是否符合特定条件。我们可以以易于阅读的紧凑方式编写代码,而不是冗长的语句。在下面的示例中,我使用了我赋值的地方(数据类型),然后使用模式匹配来打印它是什么数据类型。if-elseobject5int
例
C#
1
object obj = 5;
23
if (obj is int i)
4
{
5Console.WriteLine($"Integer: {i}");
6
}
7
switch (obj)
8
{
9case int j:
10Console.WriteLine($"Integer: {j}");
11break;
12case string s:
13Console.WriteLine($"String: {s}");
14break;
15default:
16Console.WriteLine("Unknown type.");
17break;
18
} 9. 扩展方式
关键词:(在方法签名中)
this
扩展方法允许开发人员在不更改其原始代码的情况下向现有类型添加新方法。这些方法是静态的,但工作方式类似于扩展类型的实例方法,提供了一种流畅的方式来添加新功能。扩展方法使代码更加模块化和可重用,使开发人员能够从库外部扩展类型,而不会弄乱原始代码。扩展方法还支持“开放/封闭”原则,这意味着代码对扩展是开放的,但对修改是封闭的。
例
C#
1
public static class StringExtensions
2
{
3public static bool IsNullOrEmpty(this string value)
4
{
5return string.IsNullOrEmpty(value);
6}
7
}
89
// Usage
10
string str = null;
11
bool result = str.IsNullOrEmpty(); // result is true 10. 元组
关键词:
tuple
元组允许您将多个值分组为一个单元。当您想要从方法发回多个值而不使用参数或仅为了在对象之间传输数据而创建新类时,它们会有所帮助。使用元组,您可以打包并返回一组相关值,这使我们的代码更易于阅读和理解。您可以为元组中的字段命名,也可以不命名它们。然后,使用 和 引用值,如下所示。Item1Item2
例
C#
1
public (int, string) GetPerson()
2
{
3return (1, "John Doe");
4
}
56
// Usage
7
var person = GetPerson();
8
Console.WriteLine($"ID: {person.Item1}, Name: {person.Item2}"); 结论
通过使用 / 来很好地处理任务,使用 LINQ 来获取数据,保证数据安全,确保类型正确,对于对事件做出反应的程序,使用 Lambda 表达式来编写短函数,使用 null 类型来处理缺失的信息,使用 Pattern Matching 来使代码更清晰并说得更多,使用 Extension 方法添加新功能, 和元组 为了更好地组织数据,您可以编写更易于管理且不太可能中断的代码。
相关文章:
10 个 C# 关键字和功能
在 Stack Overflow 调查中,C# 语言是排名第 5 位的编程语言。它广泛用于创建各种应用程序,范围从桌面到移动设备再到云原生。由于有如此多的语言关键字和功能,对于开发人员来说,要跟上新功能发布的最新信息将是一项艰巨的任务。本…...
贪心算法之重叠区间问题
以下四个题都是重叠区间问题 452. 用最少数量的箭引爆气球 为了让气球尽可能重叠,先按照气球起始位置由大到小排序tips:sort默认就可以实现以上排序,不需要写cmp重点:当下一个气球的左边界不小于上一个气球的右边界时(即有重叠的…...
Python爬虫入门教程(非常详细)适合零基础小白
一、什么是爬虫? 1.简单介绍爬虫 爬虫的全称为网络爬虫,简称爬虫,别名有网络机器人,网络蜘蛛等等。 网络爬虫是一种自动获取网页内容的程序,为搜索引擎提供了重要的数据支撑。搜索引擎通过网络爬虫技术,将…...
ArcGIS Pro基础:软件的常用设置:中文语言、自动保存、默认底图
上图所示,在【选项】(Options)里找到【语言】设置,将语言切换为中文选项,记得在安装软件时,需要提前安装好ArcGIS语言包。 上图所示,在【选项】里找到【编辑】设置,可以更改软件默认…...
依赖注入+中央事件总线:Vue 3组件通信新玩法
🌈个人主页:前端青山 🔥系列专栏:Vue篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来Vue篇专栏内容:Vue-依赖注入-中央事件总线 目录 中央事件总线使用 依赖注入使用 总结 中央事件总线 依赖注入…...
EasyCVR视频汇聚平台构建远程安防监控:5大亮点解析,助力安防无死角
随着科技的飞速发展,远程安防监控系统已经成为现代社会中不可或缺的一部分,无论是在小区、公共场所还是工业领域,安防监控都发挥着至关重要的作用。而EasyCVR作为一款功能强大的视频监控综合管理平台,其在构建远程安防监控系统方面…...
fastadmin安装插件报500的错误
项目场景: 项目新建后,想在本地项目中安装相关的插件,但是在插件管理页面点击安装的时候一直报500的错误。 问题描述 我们将项目中的调试打开,在application/config.php里修改 app_debug,将false改为true,…...
速盾:为什么需要服务器和cdn?
在互联网时代,服务器和CDN(内容分发网络)起着非常重要的作用。它们是实现高效、稳定和可靠网络服务的关键组成部分。下面我将详细阐述为什么需要服务器和CDN。 首先,服务器是互联网上存储、处理和传输数据的中心枢纽。当我们在浏…...
十四、模拟实现 list 类
Ⅰ . list 基本框架的实现 01 结点的建立 为了实现链表,我们首先要做的应该是建立结点 为了和真正的 list 进行区分,我们仍然在自己的命名空间内实现 代码实现: namespace yxt {// 建立结点template<class T>struct ListNode{T _d…...
JavaScript简介之引入方式
JavaScript 引入方式 提问:CSS的引入方式?在学习 JavaScript 语法之前,我们首先要知道在哪里写 JavaScript 才行。想要在 HTML 中引入 JavaScript,一般有 3 种方式。 外部 JavaScript 内部 JavaScript 元素事件 JavaScript&#…...
同一台电脑上安装不同版本的nodejs(搭配VSCode)
今天拉取了一个前后端分离的项目,运行前端的时候,出现node版本不匹配的情况。 本文章将从安装node.js开始到VSCode使用进行讲解 1、去官网下载node版本 以16版本为例,需要哪个版本,就在网址上把版本号替换即可 https://nodejs.o…...
python小游戏之摇骰子猜大小
最近学习Python的随机数,逻辑判断,循环的用法,就想找一些练习题,比如小游戏猜大小,程序思路如下: 附上源代码如下: 摇骰子的函数,这个函数其实并不需要传任何参数,调用后…...
C++入门——12继承
1.继承 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简…...
Python做统计图之美
Python数据分析可视化 案例效果图 import pandas as pd import matplotlib.pyplot as plt import matplotlib# 数据 data {"房型": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11],"住宅类型": ["普通宅", "普通宅", "普通宅", &q…...
激光雷达点云投影到图像平面
将激光雷达点云投影到图像平面涉及几何变换和相机模型的应用。以下是该过程的基本原理: 1. 坐标系转换 激光雷达生成的点云通常位于激光雷达的坐标系中,而图像则在相机坐标系中。为了将点云投影到图像上,首先需要将点云从激光雷达坐标系转换…...
[python]将anaconda默认创建环境python版本设置为32位的
首先看看gpt怎么回答的 装了Anaconda。如果尚未安装,可以从Anaconda官网下载适合你的操作系统的安装程序,并按照安装向导进行安装。 二、创建32位Python环境 在Anaconda中,你可以通过修改环境变量来尝试切换到32位模式(尽管这并…...
Jmeter+Influxdb+Grafana平台监控性能测试过程(三种方式)
一、Jmeter自带插件监控 下载地址:Install :: JMeter-Plugins.org 安装:下载后文件为jmeter-plugins-manager-1.3.jar,将其放入jmeter安装目录下的lib/ext目录,然后重启jmeter,即可。 启动Jmeter,测试计…...
[创业之路-135] :ERP、PDM、EDM、Git各种的用途和区别,硬件型初创公司需要哪些管理工具?
目录 前言: 一、ERP(企业资源计划) 二、PDM(产品数据管理系统) 三、EDM(文档管理系统,有时也指电子邮件营销) 四、Git 总结 五、硬件研发、生产型企业需要哪些管理工具&#…...
通过剪枝与知识蒸馏优化大型语言模型:NVIDIA在Llama 3.1模型上的实践与创新
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
DOM型xss靶场实验
xss是什么? XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。比如这些代码包括HTML代码和客户端脚本。攻击者利用XSS漏洞旁路掉访问控制--例如同源策略(same origin policy)。这种类型的漏洞由…...
wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
