- 博客(23)
- 收藏
- 关注
原创 C#异步2
对于服务器端应用,特别是处理多个客户端请求的情况,异步编程可以让服务器在等待一个请求的长时间操作(如数据库查询、文件读取)时,去处理其他请求。而异步编程可以让应用在执行耗时操作的同时,仍然能够响应用户的操作,如滚动界面、点击按钮等,从而提高用户体验。例如,在一个企业级应用中,当从数据库中查询大量数据时,应用可以异步执行查询操作,同时处理其他业务逻辑。例如,在一个文件备份应用中,当备份大型文件时,可以异步执行备份操作,同时用户可以在界面上查看备份进度或进行其他操作。
2024-12-27 11:00:00
350
原创 C#异步1
例如,当一个方法执行一个长时间的操作(如网络请求、读取大型文件)时,程序会阻塞在这个操作上,直到操作完成才能继续执行后续的代码。而异步编程则允许程序在执行一个长时间操作时,不必等待该操作完成就可以继续执行其他任务。异步则是你点完菜后,服务员给你一个取餐器,你可以先找座位、聊天等,等餐做好取餐器提醒你再去取餐。在暂停期间,执行权会交回给调用者,当任务完成后,方法会从暂停的地方继续执行。:用于修饰方法,表示这个方法是异步方法。时,它会暂停当前异步方法的执行,直到等待的任务(时,方法会暂停,直到。
2024-12-26 19:00:00
234
原创 C#冒泡排序
它重复地走访要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。然后进行第二轮比较,此时不需要比较最后一个元素了,因为它已经是最大的。在每一轮中,比较相邻的元素,如果。,就交换它们的位置。方法中,首先定义了一个未排序的整数数组。以一个简单的整数数组为例,假设数组为。第一轮比较时,首先比较第一个元素。轮这样的比较,数组就会排序完成。,所以交换它们的位置,数组变为。是数组元素个数),最大的元素。循环输出排序后的数组元素。
2024-12-25 19:45:00
874
原创 C#(事件)2
可以方便地添加或移除订阅者,对事件处理逻辑进行修改,而不会影响到其他部分的代码。例如,在一个大型的企业级应用程序中,不同的模块可以通过事件来进行通信,当需要添加新的功能时,只需要订阅相应的事件并实现处理逻辑即可。发布者不需要知道哪些对象会订阅它的事件,订阅者也不需要知道事件是如何被触发的细节。它们只需要遵循事件的契约(委托的签名)。如果没有合适的预定义委托,就需要定义一个委托来匹配事件处理程序的签名。当定义自定义事件时,如果不需要传递额外的信息,可以直接使用。是触发事件的对象(通常是发布者本身),
2024-12-24 19:00:00
351
原创 C#(事件)
例如,EventHandler委托是一个预定义的委托,用于表示没有返回值并且带有两个参数(object sender和EventArgs e)的方法,很多标准的事件都基于这个委托来定义。订阅者是对事件感兴趣并注册(订阅)以接收事件通知的对象。继续以按钮点击为例,一个表单(Form)类中的某个方法可能会订阅按钮的 “Click” 事件,以便在按钮被点击时执行如显示消息框之类的操作。它允许一个对象(发布者)在某个特定情况发生时,通知其他对象(订阅者),而订阅者可以根据接收到的通知执行相应的操作。
2024-12-23 19:00:32
477
原创 C#(委托)2
这里MathOperation就是委托类型的名称,它可以引用任何符合这个签名(返回int类型,有两个int参数)的方法。一旦你声明了委托类型,就可以创建委托的实例。委托实例必须引用一个与委托签名匹配的方法。例如,在Windows Forms应用程序中,当用户点击一个按钮时,会触发一个。在 C# 的图形用户界面(GUI)编程中,事件处理是委托的一个重要应用场景。是一个预定义的委托类型,用于处理事件。当用户点击按钮时,就会调用。一旦委托实例化完成,就可以通过委托实例来调用它所引用的方法。,你可以这样为按钮的。
2024-12-22 18:52:16
487
原创 C#(委托)
这个 “工具槽” 有特定的形状(对应委托的参数列表和返回类型要求),只有符合这个形状的工具(方法)才能放入。一旦放入了工具(方法),就可以通过这个“工具槽”(委托)来使用该工具(调用方法)。例如,有一个方法void PrintMessage(string message),可以定义一个委托来存储对这个方法的引用,之后通过委托调用PrintMessage方法。其中returnType表示委托所引用方法的返回类型,DelegateName是委托的名称,parmeterList是委托所引用方法的参数列表。
2024-12-19 15:53:01
485
原创 C#枚举2
在C#中,不能将一个任意的整数赋值给一个枚举变量,除非这个整数的值在枚举定义的范围内。例如,如果有一个WeekDays枚举变量,你不能将一个大于6(因为WeekDays枚举有7个成员,最大值为6)的整数赋值给它,这样可以减少代码中的错误。例如,如果你中有一个函数,它接受一个表示颇色的参数,使用枚举类型(如enum Colors{red,Green,Blue})比使用整数(如0表示红色、1表示绿色、2表示蓝色)更容易理解。后续的枚举成员的值也是按照你设定的规则来确定的。枚举有一些有用的方法和属性。
2024-12-18 19:17:49
339
原创 C#中的枚举
在这个例子中,WeekDays是枚举类型的名称,Monday、Tuesday等是枚举的成员。默认情况下,第一个枚举成员的值为0,后面的成员的值依次递增1.所以在WeekDays枚举中,Monday的值是0,Tuesday的是1,以此类推。在C#中,枚举(Enum)是一种由用户定义的值类型。它主要用于定义一组命名的常量。例如,如果你有一个表示星期几的集合,你可以定义一个枚举来表示它们。当运行这段代码时,控制台会输出Wednesday。可以通过枚举类型来访问其成员。
2024-12-18 10:40:42
320
原创 C#中的switch语句
然后,将这个值与每个case标签后的常量值进行比较。如果找到匹配的值,就会执行改case标签下的代码块。这是因为浮点数在计算机中的存储存在精度问题,可能导致比较结果出现意外。它根据一个表达式的值来决定执行多个代码块中的一个。例如,一个变量a,当a的值为5时,执行与5相关的代码块;当a的值为6时,执行与6相关的代码块,以此类推。语句链,在某些情况下,switch语句可以使代码更清晰,更易读,特别是当有多个固定的值需要进行比较时。表达式可以是多种类型,包括整数类型(如int、long)、字符类型(
2024-12-10 20:30:00
2034
原创 UDP丢包问题
比如,一个简单的UDP数据接收程序,其接收缓冲区设置1024字节,当大量的大数据包(每个数据包大小超过接收缓冲区剩余空间)快速到达时,就会发生缓冲区溢出,进而丢包。例如,在一个使用Wi-Fi连接的物联网设备向服务器发送UDP数据时,如果Wi-Fi信号受到干扰,部分数据包在传输过程中出现错误,接收端就会丢弃这些错误的数据包。例如,一个低端的物联网网关设备,在同时接收多个传感器发送的UDP数据时,由于其CPU处理速度慢,无法及时将接收到的数据包放入缓冲区,就可能会丢失一些数据包。接收端设备的处理能力有限。
2024-12-09 20:15:00
1608
原创 TCP的丢包问题
快速重传是基于接收端的反馈,当接收端收到一个失序的数据包时,会立即发送重复的 ACK。例如,在一个带宽有限的网络环境中,如果同时有多个设备进行大数据量的传输,如在家庭网络中多个设备同时进行高清视频的在线播放,路由器的缓存就可能会被填满。此时,新到达的 TCP 数据包就可能会被丢弃。:当服务器或客户端的处理能力达到极限时,无法及时处理接收到的 TCP 数据包,也可能会导致丢包。例如,一个性能较差的服务器同时处理大量的连接请求和数据传输,CPU 和内存资源被耗尽,就可能会丢弃部分数据包。
2024-12-08 19:12:12
704
原创 TCP粘包问题
TCP 是面向字节流的协议,它把应用层交下来的数据仅仅看作是一连串的无结构的字节流。如果发送方发送数据的速度很快,而接收方的应用程序读取数据的速度较慢,那么接收方的 TCP 缓冲区就会积累多个发送方发送的数据包,这些数据包在缓冲区中可能会粘在一起,当应用程序读取时,就会出现粘包现象。例如,接收端期望按照固定长度的消息格式来解析数据,粘包后的数据长度不符合预期,可能会导致解析出错误的消息内容。接收方先读取这 4 个字节,得到数据包的长度 n,然后再读取 n 个字节的数据作为一个完整的数据包进行处理。
2024-12-05 19:00:52
613
原创 C#中的数组(多维数组)
对于更高维的数组(如三维数组数据类型[ , , ]数组名),可以使用更多的索引来访问元素。,访问元素的方式为threeDArray[ i,j,k ],其中i表示第一维的索引,j表示第二维的索引,k表示第三维的索引。例如,对于上面定义的myArray数组,访问第二行第三列的元素(假设行和列索引从 0 开始计数),可以使用myArray[ 1,2 ]。,这创建了一个2行3列的二维数组,第一行的元素是1、2、3,第二行的元素是4、5、6。例如,一个表示棋盘的二维数组,行可以表示棋盘的行,列可以表示棋盘的列。
2024-12-04 18:56:20
579
原创 C#中的数组2
例如,int[,] twoDArray=new int[3,4];以使用两个索引来访问元素,如woDArray[1,2]表示访问第二行第三列的元素。这是一种简洁的遍历数组的方式,它可以自动遍历数组中的每个元素,而不需要显式地使用索引。语法为int[,,] threeDArray=new int[2,3,4];,访问访问元素时需要使用三个索引,如hreeDArray[0,1,2];有时候需要从数组的末尾开始向前遍历。可以使用for循环来实现,例如对于int[ ] reverseArray={1,2,3};
2024-12-03 19:08:17
543
原创 C#中的数组
这里创建了一个包含5个整数的数组,并分别赋予了初始值1、2、3、4、5。例如,要定义一个包含整数的数组,可以使用以下语法:int[] myArray;在C#中,数组是一种数据结构,它可以存储多个相同类型的元素。数组的大小是固定的,一旦创建,就不能改变其长度(不过有一些变通的方法,如使用。在 C# 中,数组的索引从 0 开始。指定长度初始化:也可以先指定数组的长度,然后再为每个元素赋值。如果常识访问超出数组范围的索引(例如,对于长度为 5 的数组,访问。表示数组中的第五个元素(其值为 5)。
2024-12-02 18:54:47
939
原创 C#中的方法2
当返回类型不是void时,方法体中必须包含return语句来返回一个与指定返回类型匹配的值。参数是方法从外部接收数据的方式。参数可以有零个或多个,每个参数都需要指定类型和名称。如果方法不返回任何值,返回的类型因该是void。方法可以返回各种数据类型,包括基本数据类型(如。等)和引用数据类型(如。
2024-11-28 19:07:43
518
原创 C#中的方法
比如在一个大型的游戏开发项目中,会有处理玩家输入的方法、渲染图形的方法、计算游戏逻辑的方法等,每个方法负责一个特定的功能,使得整个程序的结构更加清晰。代码复用:例如,如果你需要在多个地方计算两个整数的和,你可以定义一个方法来执行加法操作。这样,每次需要进行加法计算时,就可以调用这个方法,而不是在每个需要计算的地方都重复编写加法的代码。public:这是最常用的访问修饰符之一。使用 public 修饰的方法可以从定义它的类的外部访问。private:表示方法只能在其所属的类的内部访问。return 结果;
2024-11-27 19:01:05
218
原创 UDP的优缺点
这意味着发送方可能会以很高的速率发送数据,而不顾及接收方的接收能力和网络的拥塞状况。当接收方处理数据的速度跟不上发送方发送数据的速度,或者网络出现拥塞时,就会导致数据丢失。由于 UDP 没有复杂的连接建立和维护机制,也不需要像 TCP 那样进行大量的状态跟踪(如确认序号、窗口大小等),所以在实现 UDP 协议时,系统资源的消耗相对较少。UDP 支持广播(向网络中的所有主机发送数据)和多播(向网络中的一组主机发送数据)操作。UDP 是无连接的协议,它不提供数据传输的可靠性保证。
2024-11-26 19:19:19
681
原创 TCP的优缺点
TCP通过一系列机制来确保可靠传输,它使用系列号对发送的数据进行编号,接收方和通过序列号来检查数据是否完整,若有数据丢失,发送方将会重新发送都是部分。TCP确认应答机制,接收方收到数据后会向发送方发送确认信息(ACK),告诉发送方数据已经正确接收。因为TCP要建立连接,维护连接状态,进行序列号管理,确认应答,流量控制和拥塞控制等一系列复杂的操作,所以会产生较大的开销。TCP能够根据接收方的接收能力来调整发送方的发送速率,可感知网络的拥塞状况,自动调整发送速率以避免网络拥塞。
2024-11-25 18:58:58
570
原创 TCP和UDP
TCP的连接机制是面向连接,TCP通过三次握手机制完成连接,三次握手机制,三次握手保证双方确认准备好发送数据和接收数据,并且能够确保按顺序准确无误的发送数据。UDP不需要建立连接,发送数据时不需要提前通知接收方,UDP不够可靠,它会将数据分成小的数据报,进行独立发送,它不能给这些数据报的顺序提供保证,并且也不会对丢失的数据进行处理。第二次握手:服务器收到连接请求后,会向客户端发送一个ACK表示收到请求,并向客户端发送自己的SYN。第三次握手:客户端收到服务器信息,并向服务器发送一个ACK表示确认收到。
2024-11-22 16:24:57
344
原创 C#基础while循环语句
适合不确定次数的循环:当循环再开始前,不确定需要重复执行的一个语句的具体次数时,while循环是一个很好的选择。比如,在遍历一个动态生成的列表或者根据某个条件不断重复执行操作,直到满足另一个条件为止的场景中,while循环就非常适用。当条件表达式的值为true时,循环体中的语句就会被执行,当条件表达式为false时,循环结束,程序继续执行循环后面的语句。避免死循环:如果在循环体中没有改变条件表达式中的变量的值,可能会导致循环条件一直未真,从而形成死循环。while(条件表达式)
2024-11-21 19:05:03
900
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人