10 个 C# 关键字和功能

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

f450576615fc08a17d2baeec271714ea.png

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 方法添加新功能, 和元组 为了更好地组织数据,您可以编写更易于管理且不太可能中断的代码。

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

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

相关文章

C语言——操作符详解

目录 1.操作符的分类 2.原码、反码和补码 3.移位操作符 3.1 左移操作符 3.2 右移操作符 4.位操作符 4.1 按位与& 4.2 按位或| 4.3 按位异或^ ​编辑 4.4 按位取反~ 4.5 应用题 4.5.1 题目&#xff1a;不能创建临时变量&#xff0c;实现两个整数的交换 4.5.2 …

本地下载安装WampServer结合内网穿透配置公网地址远程访问详细教程

文章目录 前言1.WampServer下载安装2.WampServer启动3.安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4.固定公网地址访问 前言 Wamp 是一个 Windows系统下的 Apache PHP Mysql 集成安装环境&#xff0c;是一组常用来…

FFMPEG推流器讲解

FFMPEG重要结构体的讲解 FFMPEG中有六个比较重要的结构体&#xff0c;分别是AVFormatContext、AVOutputFormat、 AVStream、AVCodec、AVCodecContext、AVPacket、AVFrame、AVIOContext结构体&#xff0c;这几个结构体是贯穿着整个FFMPEG核心功能。 AVFormatContext 这个结构…

nginx基础配置

1. https配置 首先在nginx.conf中配置https 2. 重定向 rewrite ^/(.*)$ https://www.sxl1.com/$1 permanent;3. 自动索引 autoindex on;4. 缓存 Nginx expire缓存配置: 缓存可以降低网站带宽&#xff0c;加速用户访问location ~ .*\.(gif|jpg|png)$ {expires 365d;roo…

react最好用的swiper插件和拖动插件 react-tiny-slider react-draggable

react移动端项目&#xff0c;其实有挺多的ui框架的&#xff0c;但是我们公司的项目&#xff0c;都是自己封装的ui库&#xff0c;又不可能为了一个轮播图就去再安装一个ui库 所以找了很多的轮播插件&#xff0c;都是不能满足需求 最后找到了它&#xff0c;react-tiny-slider&…

Windows Microsoft Edge 浏览器 配置【密码】

在浏览 Web 时&#xff0c;Microsoft Edge 可以轻松保存密码。 在桌面或移动设备上的 Edge 浏览器中输入新密码时&#xff0c;Microsoft Edge 会询问你是否要记住用户名和密码。 下次访问该网站时&#xff0c;浏览器将完成帐户信息的填写。 如果使用 Microsoft 帐户登录到 Edg…

redis集合若干记录

无序集合 redis通常使用字典结构保存集合数据&#xff0c;字典健存储集合元素&#xff0c;字典值为空。如果一个集合全为整数&#xff0c;使用字典就有点浪费了&#xff0c;redis使用intset保存。 插入元素到intset中 获取插入元素编码&#xff0c;如果插入元素编码级别高于int…

机器学习 之 sklearn的使用介绍和如何找到API

scikit-learn&#xff08;简称 sklearn&#xff09;是基于python语言的一个第三方机器学习库&#xff0c;它提供了简单而有效的工具来进行数据分析和建模。建立在numpy pandas SciPy和Malpotlib库上&#xff0c;下面是对如何使用 sklearn 以及如何找到其 API 的一个基本介绍&am…

仿RabbiteMq实现简易消息队列正式篇(需求分析)

TOC 目录 MQ的实现方法 RabbitMq中的相关概念 消息队列系统模块划分 总体划分 服务端模块 数据管理模块 虚拟机数据管理模块 交换机路由模块 消费者管理模块 信道&#xff08;通信&#xff09;管理模块 连接管理模块 服务端BrokerServer模块 客户端模块 消费者管…

MySQL-MVCC举例说明

在数据库系统中&#xff0c;多版本并发控制&#xff08;MVCC, Multi-Version Concurrency Control&#xff09; 是一种用于提高并发性能的机制&#xff0c;它允许多个事务同时读取和写入数据&#xff0c;而不会产生锁等待和阻塞的问题。MySQL 的 InnoDB 存储引擎广泛使用了 MVC…

Keepalived 高可用集群详解和配置

Keepalived 高可用集群 集群类型 1、LB&#xff08;Load Balance&#xff09;&#xff1a;负载均衡 LVS&#xff1a;四层负载均衡 HAProxy&#xff1a;七层/四层 负载均衡 nginx&#xff1a;七层负载均衡 (http/upstream,stream/upstream) 2、HA&#xff08;High Availa bili…

C++ 设计模式——工厂方法模式

工厂方法模式 工厂方法模式主要组成部分代码实现工厂方法模式模式的 UML 图工厂方法模式 UML 图解析优点和缺点适用场景 工厂方法模式 工厂方法模式是一种创建型设计模式&#xff0c;它通过定义一个接口用于创建对象&#xff0c;但由子类决定实例化哪个类。与简单工厂模式不同…

Spring项目:文字花园(三)

一.实现博客详情 1.后端逻辑代码 controller层添加方法&#xff08;根据博客id查看博客详情&#xff09; RequestMapping("/getBlogDetail")public Result<BlogInfo> getBlogDetail(Integer blogId){log.info("getBlogDetail, blogId: {}", blogId…

vue 后台管理 之 状态管理 vuex 的使用

幸福是一种能力 文章目录 一、数据驱动视图二、VueX 数据公共池 一、数据驱动视图 我们都知道 vue 之所以好用&#xff0c;是因为官方帮我们做了数据驱动视图初始化时将数据和视图进行绑定&#xff0c;通过 watcher 来监听数据的变化&#xff0c;当数据变化时&#xff0c;会触…

这三大创意神器,一个不用就是错过了一个小目标!

【导语】在这个充满无限可能的数字时代&#xff0c;创意成为了推动我们前行的强大动力。但你是否曾因视频背景杂乱无章而苦恼&#xff1f;是否渴望将静态图片瞬间赋予生命&#xff1f;又或是对模糊照片中的珍贵瞬间束手无策&#xff1f;今天&#xff0c;就让我们揭秘三大变态且…

Linux搭建环境:从零开始掌握基础操作(二)

​ ​ 您好&#xff0c;我是程序员小羊&#xff01; 前言 软件测试第一步就是搭建测试环境&#xff0c;如何搭建好测试环境&#xff0c;需要具备两项的基础知识&#xff1a; 1、Linux 命令: 软件测试第一个任务, 一般都需要进行环境搭建, 一部分&#xff0c;环境搭建内容是在服…

Your local changes would be overwritten by merge git

方法二 直接覆盖本地的代码&#xff0c;放弃自己本地的改动&#xff0c;只保留服务器端代码 直接回退到上一个版本&#xff0c;再进行pull。 【步骤】 直接 VCS -> Git -> Reset HEAD… 选择需要的reset模式&#xff1a;hard&#xff08;即放弃本地代码&#xff0c;新修…

JavaScript基础——闭包

闭包简介 闭包的作用 闭包可以保留变量的状态 闭包可以让变量私有化 闭包的缺点 闭包简介 在JavaScript中&#xff0c;重复声明同一个变量会导致变量冲突&#xff0c;在这个时候可以使用闭包创建独立的执行环境。 在JavaScript中&#xff0c;闭包是指封闭的执行环境&#xff…

【图像去噪】论文精读:Toward Convolutional Blind Denoising of Real Photographs(CBDNet)

文章目录 前言Abstract1. Introduction2. Related Work2.1. Deep CNN Denoisers2.2. Image Noise Modeling2.3. Blind Denoising of Real Images 3. Proposed Method3.1. Realistic Noise Model3.2. Network Architecture3.3. Asymmetric Loss and Model Objective3.4. Trainin…

Spring IoCDI(下)—DI的尾声

我们之前学习了控制反转IoC&#xff0c;接下来就开始学习依赖注入DI的细节。 依赖注入是一个过程&#xff0c;是指IoC容器在创建Bean时&#xff0c;去提供运行时所依赖的资源&#xff0c;而资源指的就是对象。我们使用 Autowired 注解&#xff0c;完成依赖注入的操作。简单来说…