10 个 C# 关键字和功能

news2024/11/15 19:43:45

在 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
{
3
    using (HttpClient client = new HttpClient())
4
    {
5
        string result = await client.GetStringAsync("http://bing.com");
6
        return result;
7
    }
8
}

2. LINQ

  • 关键词: , , , , , ,fromselectwheregroupintoorder byjoin

LINQ(语言集成查询)提供了一种简单的方法,可以直接在 C# 中查询各种数据源,如数据库、集合和 XML,而无需与其他框架(如 ADO.NET 等)交互。通过使用与 SQL 相同的语法,LINQ 使开发人员能够以可读的方式编写查询。

C#

1
var query = from student in students
2
            where student.Age > 18
3
            orderby student.Name
4
            select student;

3. 性能

  • 关键词property

属性主要是提供灵活机制来读取、写入或计算私有字段值的成员。通常,我们隐藏内部私有支持字段,并通过属性公开它们。这使调用者可以轻松访问数据。在下面的示例中,是隐藏名为 的支持字段的属性,标记为以避免外部调用者直接修改该字段。publicNamenameprivate

C#

1
class Person
2
{
3
  private string name; // backing field
4
  public string Name   // property
5
  {
6
    get { return name; }
7
    set { name = value; }
8
  }
9
}
10


11
class Program
12
{
13
  static void Main(string[] args)
14
{
15
    Person P1 = new Person();
16
    P1.Name = "Sunny";
17
    Console.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
4
    public void Display<T>(T value)
5
    {
6
        Console.WriteLine($"The value is: {value}");
7
    }
8
}
9


10
public class Program
11
{
12
    public static void Main(string[] args)
13
{
14
        Print print = new Print();
15


16
        // Call the generic method with different data types
17
        print.Display<int>(10);
18
        print.Display<string>("Hello World");
19
        print.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
2


3
// This method will be pointed to by the delegate
4
public static void PrintMessage(string message)
5
{
6
    Console.WriteLine(message);
7
}
8


9
public static void Main(string[] args)
10
{
11
    // Instantiate the delegate
12
    MyDelegate1 del = PrintMessage;
13


14
    // Call the method through the delegate
15
    del("Hello World");
16
}


用于启动事件并通过处理程序处理事件的示例代码:event

C#

1
// Declare a delegate
2
public delegate void Notify();  
3


4
public class ProcessBusinessLogic
5
{
6
    public event Notify ProcessCompleted; // Declare an event
7


8
    public void StartProcess()
9
{
10
        Console.WriteLine("Process Started!");
11
        // Some actual work here..
12
        OnProcessCompleted();
13
    }
14


15
    // Method to call when the process is completed
16
    protected virtual void OnProcessCompleted()
17
{
18
        ProcessCompleted?.Invoke();
19
    }
20
}
21


22
public class Program
23
{
24
    public static void Main(string[] args)
25
{
26
        ProcessBusinessLogic bl = new ProcessBusinessLogic();
27
        bl.ProcessCompleted += bl_ProcessCompleted; // Register event handler
28
        bl.StartProcess();
29
    }
30


31
    // Event handler
32
    public static void bl_ProcessCompleted()
33
{
34
        Console.WriteLine("Process Completed!");
35
    }
36
}

6. Lambda 表达式

  • 关键词: ,lambda=>

Lambda 表达式提供了一种表示方法的简单方法,在 LINQ 查询和定义短内联函数时特别有用。此功能允许开发人员在执行简单操作时消除对传统方法定义的需求,从而编写可读的代码。Lambda 表达式使 Lambda 表达式成为开发人员在使用 C# 时的宝贵工具,从而提高了代码的清晰度和效率。

C#

1
Func<int, int, int> add = (x, y) => x + y;
2


3
int result = add(3, 4);  // result is 7

7. 可为 null 的类型

  • 关键词?

在 C# 中,可以为 null 的类型也允许值类型具有状态。当您使用可能具有值的数据库或数据源时,这会派上用场。在值类型后添加 a 有助于开发人员处理数据可能丢失或未定义的情况。这样可以防止在代码运行时导致潜在错误。此功能提供了一种清晰直接的方式来处理可选或缺失的数据,从而使应用程序更加可靠。nullnull?

例:

C#

1
int? num = null;
2
if (num.HasValue)
3
{
4
    Console.WriteLine($"Number: {num.Value}");
5
}
6
else
7
{
8
    Console.WriteLine("No value assigned.");
9
}

8. 模式匹配

  • 关键词: ,switchcase

模式匹配是 C# 7.0 中引入的另一个有用功能,然后在该语言的后续版本中进行了一系列改进。模式匹配需要一个表达式,它有助于测试它是否符合特定条件。我们可以以易于阅读的紧凑方式编写代码,而不是冗长的语句。在下面的示例中,我使用了我赋值的地方(数据类型),然后使用模式匹配来打印它是什么数据类型。if-elseobject5int

C#

1
object obj = 5;
2


3
if (obj is int i)
4
{
5
    Console.WriteLine($"Integer: {i}");
6
}
7
switch (obj)
8
{
9
    case int j:
10
        Console.WriteLine($"Integer: {j}");
11
        break;
12
    case string s:
13
        Console.WriteLine($"String: {s}");
14
        break;
15
    default:
16
        Console.WriteLine("Unknown type.");
17
        break;
18
}

9. 扩展方式

  • 关键词:(在方法签名中)this

扩展方法允许开发人员在不更改其原始代码的情况下向现有类型添加新方法。这些方法是静态的,但工作方式类似于扩展类型的实例方法,提供了一种流畅的方式来添加新功能。扩展方法使代码更加模块化和可重用,使开发人员能够从库外部扩展类型,而不会弄乱原始代码。扩展方法还支持“开放/封闭”原则,这意味着代码对扩展是开放的,但对修改是封闭的。

C#

1
public static class StringExtensions
2
{
3
    public static bool IsNullOrEmpty(this string value)
4
{
5
        return string.IsNullOrEmpty(value);
6
    }
7
}
8


9
// Usage
10
string str = null;
11
bool result = str.IsNullOrEmpty();  // result is true

10. 元组

  • 关键词:tuple

元组允许您将多个值分组为一个单元。当您想要从方法发回多个值而不使用参数或仅为了在对象之间传输数据而创建新类时,它们会有所帮助。使用元组,您可以打包并返回一组相关值,这使我们的代码更易于阅读和理解。您可以为元组中的字段命名,也可以不命名它们。然后,使用 和 引用值,如下所示。Item1Item2

C#

1
public (int, string) GetPerson()
2
{
3
    return (1, "John Doe");
4
}
5


6
// Usage
7
var person = GetPerson();
8
Console.WriteLine($"ID: {person.Item1}, Name: {person.Item2}");

结论

通过使用 / 来很好地处理任务,使用 LINQ 来获取数据,保证数据安全,确保类型正确,对于对事件做出反应的程序,使用 Lambda 表达式来编写短函数,使用 null 类型来处理缺失的信息,使用 Pattern Matching 来使代码更清晰并说得更多,使用 Extension 方法添加新功能, 和元组 为了更好地组织数据,您可以编写更易于管理且不太可能中断的代码。

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

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

相关文章

PYQT实现上传图片,保存图片

代码如下 from PyQt5.QtWidgets import * from PyQt5.QtGui import * from PyQt5.QtCore import * import sysclass MyWindow(QMainWindow):def __init__(self):super(MyWindow, self).__init__()self.setWindowTitle("图片处理")self.setGeometry(200, 200, 500, …

Unity的物理系统

目录 3D 物理系统 主要组件 2D 物理系统 主要组件 物理引擎的选择与应用 物理模拟的控制与优化 Unity中Nvidia PhysX引擎与Box2D引擎在性能和功能上的具体比较是什么&#xff1f; 如何在Unity项目中实现Havok物理引擎&#xff0c;并与PhysX或Box2D引擎结合使用&#xf…

C/C++跳动的爱心代码

系列文章 序号直达链接1C/C爱心代码2C/C跳动的爱心3C/C李峋同款跳动的爱心代码4C/C满屏飘字表白代码5C/C大雪纷飞代码6C/C烟花代码7C/C黑客帝国同款字母雨8C/C樱花树代码9C/C奥特曼代码10C/C圣诞树代码 写在前面 C语言实现简单版的跳动的红色爱心。 语言需求&#xff1a;C语…

pdf翻译成中文的工具有哪些?pdf翻译商务学习两不误

在全球化日益加深的今天&#xff0c;pdf文档的国际交流愈发频繁&#xff0c;但语言障碍却常常让人头疼。 别担心&#xff0c;寻找一款可靠的pdf翻译成中文在线软件&#xff0c;已成为解决这一难题的关键。 今天&#xff0c;就让我们一起探索五款强大的pdf翻译器&#xff0c;它…

二叉搜索树的遍历方法

前序遍历 访问顺序 根子树->左子树->右子树 首先访问根节点&#xff0c;然后递归的前序遍历左子树&#xff0c;最后递归的前序遍历右子树 void preOrder(TreeNode* node) { if (node nullptr) return; cout << node->val << ; // 访问根节点 pre…

系统编程-文件操作和时间编程

3 文件操作和时间编程 目录 3 文件操作和时间编程 一、时间编程 1、有关时间的shell命令 2、时间API &#xff08;1&#xff09;获取日历时间 &#xff08;2&#xff09;将日历时间转化为本地时间 &#xff08;3&#xff09;将日历时间转化为格林威治时间 &#xff08…

【通过禁用任务管理器实现进程保活】(bat)

效果展示 上代码&#xff0c;球球给我点个关注吧 该程序的操作实际是开启后挂在后台循环100万次 kill掉taskmgr.exe的命令的bat脚本 echo off if "%1""hide" goto CmdBegin start mshta vbscript:createobject("wscript.shell").run(""…

git 学习--GitHub Gitee码云 GitLab

1 集中式和分布式的区别 1.1 集中式 集中式VCS必须有一台电脑作为服务器&#xff0c;每台电脑都把代码提交到服务器上&#xff0c;再从服务器下载代码。如果网络出现问题或服务器宕机&#xff0c;系统就不能使用了。 1.2 分布式 分布式VCS没有中央服务器&#xff0c;每台电脑…

基于Java+SpringBoot+Vue的体育馆管理系统的设计与实现

基于JavaSpringBootVue的体育馆管理系统的设计与实现 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&…

JavaScript初级——基础知识

一、JS的HelloWord 1、JS的代码需要编写到script标签中 2、JS的执行是根据语句从上到下一次执行的。 二、JS的编写位置 1、可以将js代码编写到标签的onclick属性中&#xff0c;当我们点击按钮时&#xff0c;js代码才会执行。 2、可以将js代码写在超链接的href属性中&#xff0…

fastzdp_sqlmodel新增get_first和is_exitsts方法

说明 经过fastzdp_login的整合&#xff0c;我们发现&#xff0c;fastzdp_sqlmodel还可以继续封装两个便捷的方法。 get_first&#xff1a;获取查询结果集中的第一条数据is_exitsts&#xff1a;判断数据是否已存在 封装get_first方法 def get_first(engine, model, query_di…

优化算法|牛顿-拉夫逊优化算法(NRBO)详解

算法介绍 本篇推文将介绍一种新的智能优化算法&#xff0c;牛顿-拉夫逊优化算法(Newton-Raphson-based optimizer, NBRO)&#xff0c;该成果由学者Sowmya等人于2024年2月发表于期刊《Engineering Applications of Artificial Intelligence》。文末提供了原文作者的完整代码git…

【python爬虫】邮政包裹物流查询2瑞数6加密

大家好呀&#xff0c;我是你们的好兄弟【星云牛马】&#xff0c;今天给大家带来的是瑞数6的补环境的总结&#xff0c;补环境肯定是需要一些基础补环境知识的&#xff0c;所以建议没有基础的小伙伴可以加入学习群进行学习&#xff0c;有基础的伙伴加入交流起来。 QQ群&#xff…

《向量数据库指南》——AI应用部署落地与权限安全差别

部署落地与权限安全差别 RAG部署有许多系统化优化点 RAG分化程度非常高,因为RAG是许多东西的组成,类似大数据生态,里边有非常多的环节,从数据抓取、数据清洗、数据挖掘,然后预处理,再经过模型分析,比如说embedding模型生成向量,然后再做数据的持久化,serving stack,就…

打卡学习Python爬虫第二天|数据解析Re 正则表达式

在前面的学习中&#xff0c;我们已经基本掌握了抓取整个网页的基本技能&#xff0c;但是在实际的需求当中&#xff0c;我们不需要整个网页的内容&#xff0c;只需要一小部分。这就涉及到数据提取的问题。 三种数据解析的方式&#xff1a;可混合使用 1、re解析 2、bs4解析 3…

无人机低成本集群技术实现详解

在现代科技的迅猛发展中&#xff0c;无人机技术已广泛应用于军事侦察、环境监测、农业植保、物流配送等多个领域。其中&#xff0c;无人机集群技术作为提高任务效率、降低成本的重要手段&#xff0c;正受到越来越多的关注。本项目旨在研发一套低成本无人机集群系统&#xff0c;…

<C语言>指针的深度学习

目录 一、字符指针 二、指针数组 三、数组指针 1.数组指针的定义 2.&数组名与数组名 3.数组指针的使用 四、数组参数、指针参数 1.一维数组传参 2.二维数组传参 3.一级指针传参 4.二级指针传参 五、函数指针 六、函数指针数组 七、指向函数指针数组的指针 八、回调函数 1…

微信云开发云存储全部下载

一、安装 首先按照这个按照好依赖 安装 | 云开发 CloudBase - 一站式后端云服务 npm i -g cloudbase/cli 二、登录 tcb login 下载 首先在你要下载到的本地文件内创建一个名为&#xff1a;cloudbaserc.json 的json文件。 填入你的id {"envId":"你的云开发环…

STM32基础篇:定时器 × 时基单元

定时器简介 定时器是一种专门负责定时功能的片上外设。F1系列的单片机最多有14个定时器&#xff08;TIM1~TIM14&#xff09;&#xff0c;具体如下表&#xff1a; 类型外设名称基本定时器TIM6和TIM7通用定时器TIM2~TIM5和TIM9~TIM14高级定时器TIM1和TIM8 基本定时器是功能最简…

Chrome浏览器无法打开无痕模式的解决方案

1.在设置---关于Chrome里面进行升级&#xff0c;升级到最新版本 2.windowsR打开运行输入regedit打开注册表 3、在HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome下面找到IncognitoModeAvailability将值修改为0,重新打开浏览器即可打开无痕模式