10 个 C# 关键字和功能
在 Stack Overflow 调查中,C# 语言是排名第 5 位的编程语言。它广泛用于创建各种应用程序,范围从桌面到移动设备再到云原生。由于有如此多的语言关键字和功能,对于开发人员来说,要跟上新功能发布的最新信息将是一项艰巨的任务。本文深入探讨了每个 C# 开发人员都应该知道的 10 个 C# 关键字。
1. Async 和 Await
关键词: ,
async
await
C# 中引入的 and 关键字使得在 C# 中处理异步编程变得容易。它们允许您编写在不阻塞主线程的情况下执行操作的代码。此功能对于受 I/O 限制或 CPU 密集型的任务特别有用。通过使用这些关键字,程序员可以轻松处理长时间运行的计算操作,例如调用外部 API 来获取数据或从网络驱动器写入或读取。这将有助于开发响应式应用程序,并可以处理并发操作。async
await
例
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
关键词: , , , , , ,
from
select
where
group
into
order by
join
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
属性主要是提供灵活机制来读取、写入或计算私有字段值的成员。通常,我们隐藏内部私有支持字段,并通过属性公开它们。这使调用者可以轻松访问数据。在下面的示例中,是隐藏名为 的支持字段的属性,标记为以避免外部调用者直接修改该字段。public
Name
name
private
例
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 或数据类型。我们最终创建了相同的重复代码,因为我们已经在方法参数中定义了一个具有数据类型的方法。泛型使定义占位符和处理不同数据类型的逻辑变得容易。int
float
double
int
例
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. 代表和活动
关键词: ,
delegate
event
委托只不过是一个对象,它引用一个方法,你可以直接通过它来调用,而不直接调用该方法。委托等效于 C++ 中的函数指针。委托是指向任何方法的类型安全指针。委托主要用于实现回调方法和处理事件。 并且是 C# 中开箱即用的内置代表。delegate
Func<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 有助于开发人员处理数据可能丢失或未定义的情况。这样可以防止在代码运行时导致潜在错误。此功能提供了一种清晰直接的方式来处理可选或缺失的数据,从而使应用程序更加可靠。null
null
?
例:
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. 模式匹配
关键词: ,
switch
case
模式匹配是 C# 7.0 中引入的另一个有用功能,然后在该语言的后续版本中进行了一系列改进。模式匹配需要一个表达式,它有助于测试它是否符合特定条件。我们可以以易于阅读的紧凑方式编写代码,而不是冗长的语句。在下面的示例中,我使用了我赋值的地方(数据类型),然后使用模式匹配来打印它是什么数据类型。if-else
object
5
int
例
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
元组允许您将多个值分组为一个单元。当您想要从方法发回多个值而不使用参数或仅为了在对象之间传输数据而创建新类时,它们会有所帮助。使用元组,您可以打包并返回一组相关值,这使我们的代码更易于阅读和理解。您可以为元组中的字段命名,也可以不命名它们。然后,使用 和 引用值,如下所示。Item1
Item2
例
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)。这种类型的漏洞由…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...

C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...

Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...

mac:大模型系列测试
0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何,是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试,是可以跑通文章里面的代码。训练速度也是很快的。 注意…...