- 博客(24)
- 收藏
- 关注
原创 WinForm通信:聊天室(简单)
1.创建Socket对象,绑定IP,构建链接2.发送send3.接收数据Receive,注意,需要持续性接收,加While,异步操作Task,取消CancellationTokenSource4.注意,有链接就应该有断开1.创建socket对象,绑定IP,启用监听2.监听对象的获取使用Accept方法3.推送消息的方法跟客户端相同都是Send。
2025-04-09 20:35:59
332
原创 C#委托(delegate)的常用方式
/ 委托的核心是跟委托的函数结构一样:定义了一个公共委托类型SayHello,该委托接受一个string类型的参数c,并返回一个string类型的值。Main和:定义了两个静态方法,分别接受一个string类型的参数content,并返回该参数本身。这两个方法的签名与SayHello委托一致,可以被SayHello委托引用。
2025-03-01 16:09:19
388
原创 C# 装箱(Boxing)与拆箱(Unboxing)
装箱是指将值类型(如intdoublestruct等)转换为引用类型(如object或装箱操作会创建一个对象实例,并将值类型的值复制到堆内存中。拆箱是指将引用类型(如object)转换回值类型(如int拆箱操作会从堆内存中提取值,并将其复制回栈内存。装箱:将值类型转换为引用类型,会增加内存分配和垃圾回收的开销。拆箱:将引用类型转换回值类型,需要显式类型转换,并增加内存访问的开销。性能问题:装箱和拆箱操作会显著降低性能,尤其是在高频率的循环中。优化建议:优先使用泛型集合(如List<T>
2025-02-27 21:07:44
845
原创 # C# 中堆(Heap)与栈(Stack)的区别
堆是一种动态内存分配机制,用于存储对象实例、引用类型(如classstringArrayList等)以及装箱后的值类型。栈:适用于存储局部变量和方法调用的上下文信息,生命周期短,分配和释放速度快。堆:适用于存储引用类型实例和装箱后的值类型,生命周期长,分配和释放速度慢,但大小较大。优化建议:合理使用栈和堆,避免不必要的装箱和拆箱操作,减少垃圾回收的负担,提高程序性能。通过理解堆与栈的区别,可以更好地优化代码的内存管理和性能。
2025-02-27 21:06:52
842
原创 C# 中 Array、ArrayList 和 List 的比较
特性ArrayArrayListList<T>类型基础数据结构非泛型集合泛型集合类型安全类型安全非类型安全类型安全性能固定大小,高性能动态大小,性能较低动态大小,高性能灵活性固定大小动态大小动态大小使用场景固定大小集合动态集合(已过时)动态集合(推荐)
2025-02-27 21:05:06
1195
原创 C# Dictionary 使用指南
如果字典的键是自定义类型,需要重写 `Equals()` 和 `GetHashCode()` 方法。// 返回 "Apple"`TryGetValue()` 方法可以安全地访问值,避免因键不存在而抛出异常。- 使用 `TryGetValue()` 方法可以避免因键不存在而抛出异常。使用 `ContainsValue()` 方法检查值是否存在。使用 `ContainsKey()` 方法检查键是否存在。使用 `Remove()` 方法根据键删除键值对。如果键已存在,`Add()` 方法会抛出异常。
2025-02-27 21:04:10
541
原创 C#学生管理系统 进阶(通过接口,继承接口的类,实现接口约束_对List中存储的数据进行排列)
【代码】C#学生管理系统 进阶(通过接口,继承接口的类,实现接口约束_对List中存储的数据进行排列)
2025-02-26 20:33:28
587
原创 C#通过接口 继承接口的类 实现约束 对List内数据类型的值进行排序,可直接复制使用
/原则意义上来说,T如果是对象,那么是没有办法比较的,但是当前对象中因为有从接口实现的比较方法,在内部是对Age进行的比较,所以这里x和y能够进行比较。//在list的数组中,想对几种数据进行排列,就要写几个方法。List<Person> list = new List<Person> //向Person中添加数据并将其添加到List中。//使用接口约束中的对列表排序的方法。public class Person : IComParable<Person> //继承接口的类。
2025-02-26 20:19:31
864
原创 C#:泛型与类和结构的比较(接口,结构体,类,泛型)
泛型类属于一种特殊的类,使用类型参数来定义类的结构和行为,主要用途是提高代码的复用度和类型安全。* 特点:泛型类在定义类型参数的时候需要用别名T之类的字符代替类型。* 主要用途:有复杂的数据结构或行为,需要继承或多态特性,封装的需求。//接口不能直接实例化,只能通过实现它的类或结构体来使用。* 结构体不能继承其他类或其他结构体,但可以实现接口继承。* 可以定义无参构造函数,有参构造函数,和析构函数。//接口中的成员是抽象的,不能提供具体的实现。* 类包含了字段,属性,方法,索引器,事件等。
2025-02-25 19:39:58
261
原创 C#:接口的讲解
/接口使用interface关键字,属于引用类型,用来定义方法,属性,索引器和委托,接口本身不实现这些成员,只定义.属于多态的一种体现。接口使用interface关键字,属于引用类型,用来定义方法,属性,索引器和委托,接口本身不实现这些成员,只定义.属于多态的一种体现。//接口的成员是抽象的(没有具体实现),实现接口的类或者结构体需要实现这些成员。//接口可以实现多继承,一个类可以实现多个接口,一个接口也可以继承多个接口。接口的成员是抽象的(没有具体实现),实现接口的类或者结构体需要实现这些成员。
2025-02-20 19:32:59
359
原创 C#:const常量和readonly只读字段的区别
const(常量)与readonly(只读字段)二者都是用于定义不可变量的,但是有区别。/// 常量的值必须在声明的时候就初始化好,并且在编译时已知.不能在运行的时候动态计算。//只读字段,可以在声明或者构造器中初始化 能在运行的时候动态计算。/// 定义了常量MaxValue,值为100。//Readonly任意类型都可以描述。//const只能描述值类型和枚举。namespace _3.const与readonly。namespace _3.const与readonly。//只读字段使用对象调用。
2025-02-20 19:24:38
586
原创 C#:结构体 struct关键字用来定义结构体 只读结构体 readonly:关键字代表构造之后就不能更改了
struct关键字用来定义结构体,属于值类型,主要的用途是封装数据,类似于类,但是只能表示简单的数据结构,例如,书本信息,坐标点,日期,时间等
2025-02-20 19:20:49
482
原创 练习:学籍管理系统
然后提供4个功能:1.添加 2.查询 3.删除(学号) 4.修改(*)//循环使用了goto和if else分支语句完成的循环。学院信息:学号,名字,年龄,性别(bool)在控制台输入对应信息,封装对象,下面是一个Student类。
2025-02-19 20:07:59
348
原创 C#:类的讲解(this,get,set,静态类,密封类,抽象类,重载与重写,Math对象)等------可下载源文件直接浏览
## 类的基本概念类是面向对象编程中实现封装和抽象的基础,是构建软件时组织代码的逻辑单元。它定义了一组具有相同属性和方法的对象的蓝图。
2025-02-18 20:47:18
192
原创 C#:类的讲解 第二(继承) 第 三(关键字partial)部分
**************************创建一个 Animal类**它是一个基类*******************************************************************第三部分****************************************************************************第二部分********************************
2025-02-17 21:43:07
708
原创 C#:类的讲解 第一部分--持续更新25.2.17
/由void变为了string,代表该方法是有返回值的方法,返回类型是string,必须要在方法中热天trtrun对应的类型。//Console.WriteLine(this.name+"喜欢吃");//可以打印,因为是只读的。//带有参数的方法,hour,minute叫做形参,多个形参之间使用 , 分割,类型可以不一致。//params:可变参数,参数的个数固定不变 , params的参数必须放到传参的最后一位。//这种有个缺点,虽然简单,但是因为没有set访问器,不能实现值的修改。
2025-02-17 13:58:03
929
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人