C#排名最靠前关键词竟然是这几个

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

0c638188fb1cef359de18d7bd54c3062.png

1. async和 await

  • 关键词:,asyncawait

    C# 中引入的 and 关键字使在 C# 中处理异步编程变得容易。它们允许您编写执行操作而不会阻塞主线程的代码。此功能对于 I/O 密集型或 CPU 密集型任务特别有用。通过使用这些关键字,程序员可以轻松处理长时间运行的计算操作,例如调用外部 API 以获取数据或从网络驱动器写入或读取数据。这将有助于开发响应式应用程序,并且可以处理并发操作。asyncawait

C#

public async Task<string> GetDataAsync()
{
    using (HttpClient client = new HttpClient())
    {
        string result = await client.GetStringAsync("http://bing.com");
        return result;
    }
}

2. LINQ

  • 关键词:, ,fromselectwheregroupintoorder byjoin

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

C#

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

3. 属性

  • 关键词property

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

C#

class Person
{
  private string name; // backing field
  public string Name   // property
  {
    get { return name; }
    set { name = value; }
  }
}

class Program
{
  static void Main(string[] args)
  {
    Person P1 = new Person();
    P1.Name = "Sunny";
    Console.WriteLine(myObj.Name);
  }
}

4. 泛型

  • 关键词:,generic<T>

    泛型允许您为类编写代码,而无需指定类处理的数据类型。它是一个允许用户使用占位符定义类和方法的类。C#2.0 中泛型的引入完全改变了创建模块化可重用代码的格局,否则这些代码需要在多个地方复制。想象一下,您正在处理 2 个数字的加法,然后需要添加 s 或 datatypes。我们最终创建了相同的重复代码,因为我们已经在方法参数中使用数据类型定义了一个方法。泛型使定义占位符和处理不同数据类型的逻辑变得容易。intfloatdoubleint

C#

public class Print
{
    // Generic method which can take any datatype as method parameter
    public void Display<T>(T value)
    {
        Console.WriteLine($"The value is: {value}");
    }
}

public class Program
{
    public static void Main(string[] args)
    {
        Print print = new Print();

        // Call the generic method with different data types
        print.Display<int>(10);
        print.Display<string>("Hello World");
        print.Display<double>(20.5);
    }
}

5. delegate和event

  • 关键词:,delegateevent

委托只不过是一个对象,它引用一个方法,你可以直接通过它调用它,而无需直接调用该方法。委托等效于 C++ 中的函数指针。委托是指向任何方法的类型安全指针。委托主要用于实现回调方法和处理事件。并且是 C# 中开箱即用的内置委托。delegateFunc<T>Action<T>

另一方面,事件使类或对象能够在发生感兴趣的事件时通知其他类或对象。例如,考虑用户单击您网站上的按钮的场景。它生成一个事件(在本例中为按钮单击),由相应的事件处理程序代码处理

声明和实例化 :delegate

C#

public delegate void MyDelegate1(string msg); // declare a delegate

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

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

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


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

C#

// Declare a delegate
public delegate void Notify();  

public class ProcessBusinessLogic
{
    public event Notify ProcessCompleted; // Declare an event

    public void StartProcess()
    {
        Console.WriteLine("Process Started!");
        // Some actual work here..
        OnProcessCompleted();
    }

    // Method to call when the process is completed
    protected virtual void OnProcessCompleted()
    {
        ProcessCompleted?.Invoke();
    }
}

public class Program
{
    public static void Main(string[] args)
    {
        ProcessBusinessLogic bl = new ProcessBusinessLogic();
        bl.ProcessCompleted += bl_ProcessCompleted; // Register event handler
        bl.StartProcess();
    }

    // Event handler
    public static void bl_ProcessCompleted()
    {
        Console.WriteLine("Process Completed!");
    }
}

6. Lambda 表达式

  • 关键词:,lambda=>

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

C#

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

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

7. 可为 null 的类型

  • 关键词?

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

C#

int? num = null;
if (num.HasValue)
{
    Console.WriteLine($"Number: {num.Value}");
}
else
{
    Console.WriteLine("No value assigned.");
}

8. switchcase

  • 关键词:,switchcase

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

C#

object obj = 5;

if (obj is int i)
{
    Console.WriteLine($"Integer: {i}");
}
switch (obj)
{
    case int j:
        Console.WriteLine($"Integer: {j}");
        break;
    case string s:
        Console.WriteLine($"String: {s}");
        break;
    default:
        Console.WriteLine("Unknown type.");
        break;
}

9. 扩展方法

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

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

C#

public static class StringExtensions
{
    public static bool IsNullOrEmpty(this string value)
    {
        return string.IsNullOrEmpty(value);
    }
}

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

10. 元组

  • 关键词:tuple

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

C#

public (int, string) GetPerson()
{
    return (1, "John Doe");
}

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

    通过使用 / 很好地处理任务,使用 LINQ 获取数据,确保数据安全,确保类型正确,以及对于对事件做出反应的程序,Lambda 表达式编写短函数,可空类型处理缺失信息,模式匹配使代码更清晰并说更多,扩展方法添加新功能, 和元组来很好地组织数据,您可以编写更易于管理且不太可能中断的代码。当您擅长使用这些功能时,您将能够构建响应迅速、可扩展且一流的应用程序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晨曦_子画

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值