首页 > 编程语言 >C#语言入门学习(八)

C#语言入门学习(八)

时间:2023-06-04 09:02:22浏览次数:37  
标签:异步 Console 入门 C# 线程 WriteLine 方法 public 语言

1. LINQ(Language Integrated Query):

- LINQ是一种在C#中集成查询功能的技术,它提供了一种统一的查询语法,使得可以对各种数据源进行查询和操作,包括对象集合、数据库、XML等。

- 使用LINQ,可以使用相同的查询语法对不同类型的数据进行查询、筛选、排序和转换等操作,简化了数据处理的编码过程。
- LINQ使用类似于SQL的查询语法,通过一组查询操作符(如`where`、`select`、`orderBy`等)来构建查询表达式。
- LINQ可以应用于各种数据集合,包括数组、集合类、数据库表、XML文档等。

下面是一个示例代码,演示了LINQ的使用:

using System;
using System.Linq;

public class Program
{
public static void Main()
{
int[] numbers = { 1, 2, 3, 4, 5, 6 };

// 使用LINQ查询语法,筛选出偶数
var evenNumbers = from num in numbers
where num % 2 == 0
select num;

// 打印结果
foreach (var num in evenNumbers)
{
Console.WriteLine(num);
}
}
}

在上述示例中,我们创建了一个整数数组`numbers`,其中包含一些数字。然后,使用LINQ的查询语法来筛选出数组中的偶数。通过`from`关键字指定迭代变量`num`和数据源`numbers`,使用`where`关键字指定筛选条件`num % 2 == 0`,使用`select`关键字指定选择的结果。

最后,通过`foreach`循环遍历查询结果`evenNumbers`,并将每个偶数打印出来。

使用LINQ,我们可以方便地进行各种查询操作,对数据进行筛选、排序、分组和投影等。这使得代码更加简洁和易于阅读,提高了开发效率。同时,LINQ还提供了强类型的查询,可以在编译时进行类型检查,减少了运行时错误的可能性。

2. 异步编程和多线程处理:

(1). 异步编程:
- 异步编程允许程序在等待某些操作完成时继续执行其他任务,而不会阻塞主线程的执行。
- 在C#中,可以使用`async`和`await`关键字来编写异步方法。
- `async`关键字修饰的方法表示异步方法,其中可以使用`await`关键字等待异步操作完成。
- 异步方法可以返回`Task`、`Task<T>`或`ValueTask<T>`等类型的对象,表示异步操作的结果。
- 异步方法通常与`Task.Run`方法一起使用,将耗时的操作放在异步任务中执行。

下面是一个示例代码,演示了异步方法的定义和调用:

using System;
using System.Threading.Tasks;

public class Program
{
public static async Task Main()
{
Console.WriteLine("开始执行异步方法");

// 调用异步方法
await MyAsyncMethod();

Console.WriteLine("异步方法执行完毕");
}

public static async Task MyAsyncMethod()
{
Console.WriteLine("异步方法开始执行");

// 模拟耗时操作
await Task.Delay(2000);

Console.WriteLine("异步方法执行完成");
}
}

在上述示例中,`Main`方法是异步的,并且调用了`MyAsyncMethod`异步方法。在`MyAsyncMethod`方法中,使用`await Task.Delay(2000)`模拟了一个耗时的操作,异步等待两秒钟后执行下一行代码。

(2). 多线程处理:
- 多线程处理允许同时执行多个线程,提高程序的并发性和响应能力。
- 在C#中,可以使用`Thread`类或`Task`类来创建和管理线程。
- `Thread`类提供了对底层线程的直接控制,可以手动创建和启动线程。
- `Task`类是对线程的更高级别的抽象,可以更方便地管理线程,并提供了更多的功能和特性。

下面是一个示例代码,演示了多线程处理的使用:

using System;
using System.Threading;

public class Program
{
public static void Main()
{
Console.WriteLine("主线程开始执行");

// 创建一个新线程并启动
Thread newThread = new Thread(DoWork);
newThread.Start();

Console.WriteLine("主线程继续执行");

// 等待新线程执行完成
newThread.Join();

Console.WriteLine("主线程执行完毕");
}

public static void DoWork()
{
Console.WriteLine("新线程开始执行");

// 模拟耗时操作
Thread.Sleep(2000);

Console.WriteLine("新线程执行完成");
}
}

在上述示例中,`Main`方法是主线程,创建了一个新的线程`newThread`并启动它。新线程`newThread`执行`DoWork`方法,其中通过`Thread.Sleep(2000)`模拟了一个耗时的操作,然后执行下一行代码。

通过使用异步编程和多线程处理,可以使程序在执行耗时操作时不会阻塞主线程,提高了程序的并发性和响应能力。但在使用多线程时需要注意线程安全性和资源共享的问题,以确保程序的正确性和可靠性。

3. 事件和委托:

(1). 委托:
- 委托是一种类型,可以将方法作为参数进行传递和调用。
- 它提供了一种封装方法调用的方式,可以将方法的引用存储在委托对象中,并在需要时调用该方法。
- 在C#中,委托是一种类或接口,通过委托类型可以定义委托变量并将方法与之关联。
- 委托类型的定义包括方法的签名和返回类型,以确保委托变量可以调用相匹配的方法。

下面是一个示例代码,演示了委托的定义和使用:

using System;

public delegate void MyDelegate(string message);

public class Program
{
public static void Main()
{
MyDelegate myDelegate = new MyDelegate(PrintMessage);

// 调用委托
myDelegate("Hello, world!");
}

public static void PrintMessage(string message)
{
Console.WriteLine(message);
}
}

在上述示例中,`MyDelegate`是一个委托类型,定义了一个接受`string`类型参数并且无返回值的委托。通过使用`new MyDelegate(PrintMessage)`语句创建了一个委托对象,并将`PrintMessage`方法与之关联。然后,通过调用委托对象`myDelegate`,可以调用`PrintMessage`方法并传递参数。

(2). 事件:
- 事件是委托的一种特殊形式,用于定义和触发特定的操作或行为。
- 它提供了一种机制,允许对象在特定事件发生时通知其他对象,以执行相应的处理逻辑。
- 在C#中,事件通常是通过定义事件成员来实现的,该事件成员基于特定的委托类型。
- 对象可以使用`+=`操作符订阅事件,表示将方法添加到事件的处理列表中。使用`-=`操作符可以取消订阅事件。

下面是一个示例代码,演示了事件的定义和使用:

using System;

public class Program
{
public static event Action<string> MyEvent;

public static void Main()
{
// 订阅事件
MyEvent += PrintMessage;

// 触发事件
MyEvent?.Invoke("Hello, world!");

// 取消订阅事件
MyEvent -= PrintMessage;
}

public static void PrintMessage(string message)
{
Console.WriteLine(message);
}
}

在上述示例中,`MyEvent`是一个事件成员,基于`Action<string>`委托类型。通过使用`+=`操作符订阅事件,将`PrintMessage`方法添加到事件的处理列表中。然后,使用`MyEvent?.Invoke("Hello, world!")`语句触发事件,

将参数传递给订阅的方法进行处理。最后,使用`-=`操作符取消订阅事件,从事件的处理列表中移除方法。

通过使用事件和委托,可以实现松耦合的代码结构,使对象之间的通信更加灵活和可扩展。事件驱动编程模式也广泛应用于GUI编程和异步操作中。

标签:异步,Console,入门,C#,线程,WriteLine,方法,public,语言
From: https://www.cnblogs.com/xykj024/p/17455180.html

相关文章

  • 通过DSL实现Elasticsearch数据高亮处理
    高亮显示的实现分为两步:1)给文档中的所有关键字都添加一个标签,例如标签2)页面给标签编写CSS样式语法:点击查看代码GET /hotel/_search{  "query": {    "match": {      "FIELD": "TEXT"//查询条件,高亮一定要使用全文检索查询    }  },  "h......
  • 【论文】Crazyswarm论文
    《Crazyswarm:大型纳米四轴飞行器群》论文总结论文名称:Crazyswarm:ALargeNano-QuadcopterSwarm摘要为大量在室内密集编队飞行的微型四轴飞行器定义了一个系统架构。对于状态估计(stateestimation),我们开发了一种方法来可靠地跟踪具有相同运动捕捉标记排列的许多小刚体(无......
  • 通过DSL实现Elasticsearch数据排序功能
    普通字段排序语法:点击查看代码GET /indexName/_search{  "query": {    "match_all": {}  },  "sort": [    {      "FIELD": "desc"  // 排序字段、排序方式ASC、DESC    }  ]}示例:点击查看代码GET/hotel/_search{"q......
  • TypeScript编程 读书笔记
    @目录TypeScript编程读书笔记TypeScript概述关于编译器类型系统javascript和typescript类型系统比较类型全解什么是类型类型术语类型浅谈anyunknownbooleannumberbigintstringsymbol对象类型别名、并集、交集类型别名并集类型和交集类型数组元组null、undefined、void和never枚举......
  • 【超简单】MacBookPro M1/M2芯片Parallels Desktop 虚拟机安装教程
    视频地址:https://www.bilibili.com/video/BV12G411M71T/?spm_id_from=333.1007.top_right_bar_window_history.content.click&vd_source=71afb275332e05d921cbb9daf9326add 软件下载链接:夸克网盘链接:https://pan.quark.cn/s/2383902337f1提取码:THRK软件PJ命令:chmod+x./inst......
  • AtCoder Beginner Contest 304
    A-FirstPlayer(abc304a)题目大意依次给定每个人的姓名和年龄,排成一圈。从年龄最小的人依次输出姓名。解题思路找到年龄最小的,依次输出就好了。神奇的代码#include<bits/stdc++.h>usingnamespacestd;usingLL=longlong;intmain(void){ios::sync_with_......
  • 【论文】基于DMPC的路径规划
    DMPC论文:《TrajectoryGenerationforMultiagentPoint-To-PointTransitionsviaDistributedModelPredictiveControl》摘要介绍了一种基于分布式模型预测控制(DMPC)的多智能体offline轨迹生成算法。通过预测未来状态并与附近的agents共享此消息,agent能够在朝着目标前......
  • C++面试八股文:指针占用多少个字节?
    某日小二参加XXX科技公司的C++工程师开发岗位4面:面试官:memset、memcpy和strcpy的区别是什么?小二:memset用于将一块内存设置为特定的值,memcpy用于将一块内存从一个位置复制到另一个位置,strcpy用于将一个字符串从一个位置复制到另一个位置。面试官:嗯,不错。那么你知道这三个函......
  • 【论文】基于MPC的路径跟踪
    mpc论文归纳《LinearvsNonlinearMPCforTrajectoryTrackingAppliedtoRptaryWingMicroAerialVehicles》AbstractthispaperdiscussesabouttheapplicationsofprecisetrajectorytrackinginclutteredenvironmentorunderdisturbanceswhenMAVswork.So......
  • 通过DSL实现Elasticsearch数据搜索功能
    DSL查询分类查询所有:查询出所有数据,一般测试用。例如:match_all全文检索(fulltext)查询:利用分词器对用户输入内容分词,然后去倒排索引库中匹配。例如:match_querymulti_match_query精确查询:根据精确词条值查找数据,一般是查找keyword、数值、日期、boolean等类型字段。例如:i......