自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

語衣的个人博客

博客内容仅供参考

  • 博客(56)
  • 收藏
  • 关注

原创 栏目总目录

总栏目C#重点ForgettableKnowledge泛型匿名方法、Lambda、Linq概念及联系Linq用法IOC容器、依赖注入和控制反转反射多线程ORM框架-Entity Framework CoreC#知识补充关于继承、多态、向上、向下转型的关系解耦小技巧字符串的定义和常用方法关于=>、_的使用问题关于base、using、yield关键字的使用async和await做了什么Task的取消暂停C#设计模式单例模式观察者模式建造者模式WP

2024-07-22 14:11:49 447

原创 C# 静态static

static关键字是一个非常重要的概念,它用于声明静态成员,这些成员属于类本身而非类的任何特定实例。静态成员在类的所有实例之间共享,这意味着无论创建了多少个类的实例,静态成员都只有一份拷贝。

2024-09-16 08:43:00 667

原创 C# List定义和常用方法

列表(List)是一种常用的集合类型,它属于System.Collections.Generic命名空间。列表是一个有序集合,可以包含重复的元素,并且可以根据索引访问元素。

2024-09-10 13:06:19 1490

原创 C# Tuple、ValueTuple

Tuple提供了一种快速、简便的方式来创建包含多个元素的数据结构,但其缺点也不容忽视。在C# 7.0及更高版本中,ValueTuple作为Tuple的改进版,提供了更好的性能和更灵活的使用方式,是处理多个返回值或临时数据结构时的更好选择。

2024-09-10 12:48:41 1520

原创 C# 关于多线程同步不同实现方式

关于多线程同步不同实现方式

2024-09-10 10:59:47 1059

原创 C# 数组定义和常用方法

在C#中,数组是一种用于存储固定大小的相同类型元素的集合。数组中的每个元素可以通过索引来访问,索引是从0开始的。Array.Sort和方法都允许使用自定义比较器来对数组或集合进行排序。// 降序排序。

2024-09-09 20:44:39 850

原创 C# 字符串定义及常用方法

一般情况下,我们将“一经赋值,其值就不能被更改”视为不变性,字符串的不变性就是指,字符串一经赋值,其值就不能被更改,当通过代码使字符串变量等于一个新的值的时候,堆上会出现一个新的字符串,然后,栈上的变量指向新的字符串,无法更改原来字符串的值。从指定的起始索引开始,截取指定长度的字符,然后返回这个子字符串。需求:按照JSON文件对比机器命令id返回结果,把机器错误信息转义成中文,即数组里的数字,难点,数组里包含了个小数组,开头结尾不要。空字符串是有效的字符串对象,表示不包含任何字符的字符串,而。

2024-09-03 14:26:41 1264

原创 C# 异步编程

总之,实现高效的异步操作需要综合考虑多个方面,包括正确使用异步编程模式、避免阻塞调用、优化并行与并发、管理资源、避免不必要的异步以及进行性能测试和调优。注意,异常处理也是异步编程中的一个重要方面,上述示例展示了如何在异步方法中抛出和捕获异常。在.NET Core(或现在更常见的.NET 5/6/7等)中实现高效的异步操作主要依赖于理解异步编程模式,特别是如何正确使用。极大地简化了异步代码的编写和理解,使得开发者能够以类似于同步代码的方式来编写异步逻辑,而无需深入底层的线程管理或回调机制。

2024-09-02 14:43:09 1791

原创 C# 并发编程(多线程、异步编程)

多线程(Multithreading)多线程是指在单个程序中同时运行多个线程的能力。每个线程都是独立执行的路径,拥有自己的堆栈和执行上下文。多线程通过并行处理多个任务来提高程序的执行效率和响应速度。异步编程(Asynchronous Programming)异步编程是一种非阻塞的编程模型,它允许程序在等待长时间运行的操作(如IO操作)完成时,继续执行其他任务。异步操作通常通过回调函数、事件、Task、async/await等机制来实现。

2024-09-02 14:33:28 1098

原创 C# 子类、接口

基本定义:接口是一种引用类型,使用interface关键字声明。它指定了一组方法、属性、事件和索引器的规范,但不提供这些方法的具体实现。命名约定:按照惯例,接口名称通常以大写字母“I”开头,后跟接口名称的其余部分,如。成员定义:接口中的成员只有声明,没有实现。成员声明使用分号结束,而不是大括号。访问修饰符:接口成员默认为public,且不允许使用private或protected修饰符。

2024-08-05 17:29:28 1244

原创 C# ?的使用

C# ?的使用

2024-08-05 14:03:24 452

原创 C# 工厂方法模式

工厂方法模式是一种非常有用的创建型设计模式,它通过定义一个创建对象的接口(即工厂接口),但将具体创建对象的任务交给子类去完成。这种模式的主要优点在于它将对象的创建与使用分离,降低了系统的耦合度,增加了系统的灵活性和可扩展性。

2024-08-02 09:31:28 683

原创 C# 日志NLog

在Visual Studio中,打开“解决方案资源管理器”,右键点击你的项目 -> “管理NuGet程序包” -> 搜索“NLog” -> 安装。将上述NLog.config配置文件添加到你的项目根目录下。确保在“属性”窗口中,将“复制到输出目录”设置为“始终复制”或“如果较新则复制”。来获取一个Logger实例,并使用它来记录日志消息。注意,当捕获到异常时,可以直接将异常对象作为第一个参数传递给。方法,这样NLog会自动将其转换为日志消息的一部分。

2024-07-29 21:56:11 288

原创 SQL 事务

事务是一组操作的集合,这些操作被当作一个单独的工作单元来执行。事务中的所有操作要么全部成功,要么全部失败,从而保持数据的一致性和完整性。

2024-07-29 21:08:39 414

原创 C# 归并排序

归并排序是一个有效的排序算法,特别适用于大数据集和需要稳定排序的场合。尽管它的空间复杂度较高,但在许多实际应用中,其稳定性和良好的性能表现使得它成为一种非常受欢迎的排序算法。

2024-07-29 21:07:30 598

原创 C# 快速排序

快速排序是一种非常高效的排序算法,在平均情况下具有O(n log n)的时间复杂度。然而,它也存在最坏情况下时间复杂度退化到O(n^2)的风险,这通常是由于不恰当的基准

2024-07-24 21:17:14 392

原创 C# 插入排序

插入排序是一种简单直观的排序算法,通过构建有序序列并在其中插入新元素来逐步完成排序。虽然其时间复杂度在最坏情况下为O(n^2),但在数据量较小或数据基本有序时,插入排序的效率很高。此外,插入排序的稳定性使其在某些需要保持元素相对顺序的场合下成为首选。通过理解插入排序的原理和特性,我们可以更好地选择和使用适合特定场景的排序算法。

2024-07-24 21:14:44 538

原创 C# 选择排序

选择排序(Selection Sort)是一种简单直观的排序算法。它的工作原理是:首先在未排序序列中找到最小(或最大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(或最大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

2024-07-24 21:11:39 445

原创 C# 冒泡排序

冒泡排序(Bubble Sort)是一种简单的排序算法,它通过重复遍历待排序的数列,比较每对相邻的项,并在顺序错误时交换它们的位置,直到没有需要交换的项为止。由于排序过程中小数逐渐“浮”到前面,大数逐渐“沉”到后面,故得名冒泡排序。

2024-07-24 21:05:35 492

原创 C# 时间、空间复杂度

时间复杂度是衡量算法执行时间随输入规模增长而变化的趋势。它通常用大O符号(O-notation)来表示,如O(n)、O(n^2)、O(log n)等。时间复杂度帮助我们快速评估算法在大量数据下的性能表现。空间复杂度是评估算法执行过程中所需占用的存储空间大小。它同样用大O符号表示,如O(1)、O(n)、O(log n)等。空间复杂度包括算法本身占用的空间以及输入输出数据所占用的空间,但不包括系统栈空间(如递归调用栈)。时间复杂度和空间复杂度是衡量算法性能的两个重要指标。

2024-07-24 20:53:03 749

原创 C# 桥接模式

桥接模式(Bridge Pattern)是一种结构型设计模式,用于将抽象部分与具体实现部分分离,使它们可以独立地变化。这种设计模式通过创建一个连接(桥)来将抽象和实现部分分离,从而允许它们独立地进行扩展和变化。桥接模式的主要目标是解耦抽象部分(如类或对象)和实现部分(如具体类或对象),使得它们可以分别进行扩展或修改,而不会相互影响。

2024-07-23 16:26:26 729

原创 C# 抽象工厂模式

抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,用于提供一个接口以创建一系列相关或相互依赖的对象,而无需指定它们具体的类。它允许客户端在不指定具体产品类的情况下,创建一系列相互依赖或相关的产品对象。这种模式是工厂方法模式的扩展,旨在解决创建多个产品族的问题。

2024-07-23 16:12:42 1217

原创 C# 适配器模式

适配器模式是一种非常实用的设计模式,它通过创建一个适配器类来解决接口不兼容的问题,使得原本不能一起工作的类能够协同工作。在C#中,适配器模式可以应用于旧系统升级、第三方库集成、多平台支持等多种场景,提高了代码的复用性和系统的灵活性。

2024-07-23 15:50:26 576

原创 C# 代理模式

代理模式是一种非常有用的设计模式,它通过引入代理对象来控制对真实对象的访问,从而实现功能增强、权限控制、日志记录等目的。在C#中,代理模式可以应用于多种场景,如远程调用、虚拟代理、保护代理等,提高了软件系统的灵活性和可扩展性。

2024-07-23 15:43:33 679 1

原创 C# 装饰器模式

装饰器模式提供了一种灵活的方式来动态地给对象添加新的功能,而无需修改其原有的代码。通过创建装饰器类,我们可以在不改变原有类结构的情况下,实现功能的扩展和组合,增强了代码的灵活性和可维护性。在C#开发中,装饰器模式尤其适用于需要动态扩展功能的场景。

2024-07-23 15:25:24 571

原创 C# 中介者模式

中介者模式(Mediator Pattern)是一种行为设计模式,它允许一组对象相互通信,而不需要知道彼此的内部结构。通过引入一个中介者对象,将原本对象之间的直接交互转化为与中介者对象的交互,从而降低了对象之间的耦合度,使得系统更加灵活和易于维护。这种模式特别适用于对象之间存在大量复杂交互关系的场景。

2024-07-23 15:18:58 964

原创 C# 设计模式分类

创建型模式主要关注对象的创建过程,包括如何实例化对象,并隐藏实例化的细节。结构型模式主要关注类和对象的组合,以形成更大的结构。行为型模式主要关注对象之间的通信和职责分配。

2024-07-23 10:58:41 1241

原创 C# ORM框架-Entity Framework Core

Entity Framework Core(简称EF Core)是一个现代的、跨平台的、开源的对象关系映射(ORM)框架,由微软开发。它允许.NET开发者通过.NET对象与关系型数据库进行交互,而无需编写大部分的数据访问代码,极大地简化了数据访问的过程。

2024-07-18 20:11:38 1317

原创 C# 多线程

总之,实现高效的异步操作需要综合考虑多个方面,包括正确使用异步编程模式、避免阻塞调用、优化并行与并发、管理资源、避免不必要的异步以及进行性能测试和调优。注意,异常处理也是异步编程中的一个重要方面,上述示例展示了如何在异步方法中抛出和捕获异常。极大地简化了异步代码的编写和理解,使得开发者能够以类似于同步代码的方式来编写异步逻辑,而无需深入底层的线程管理或回调机制。的构造函数只定义了参与者的数量,并没有实际的“屏障点”概念(除了初始化时的那一次)。关键字,以及理解异步操作背后的线程和任务的管理。

2024-07-18 20:10:16 1368

原创 C# ForgettableKnowledge

但是,它不允许从类的实例或外部类直接访问。即,你不能从类的实例外部(包括类的静态方法或属性)直接访问受保护的成员,但可以在派生类中访问它们。这意味着成员既可以在项目内部被访问,也可以在派生类中被访问,但仅限于那些可以访问该成员的程序集。这种访问级别允许同一程序集中的任何代码访问成员,但不允许其他程序集中的代码访问。访问修饰符确实允许子类访问成员,但不允许实例(即类的非静态成员)直接从类的外部访问这些成员(除非它们是通过派生类访问的)。这是访问级别最严格的修饰符,仅限于其所在的类或结构体内的成员访问。

2024-07-16 14:07:50 244

原创 C# 匿名方法、Lambda、Linq概念及联系

当然,我会重新排版并提供一个更详细的示例,以展示LINQ的更多语法,并明确匿名方法、Lambda表达式以及它们与LINQ之间的区别。

2024-07-15 10:57:21 435

原创 C# Linq用法

LINQ是可扩展的,你可以通过实现或的扩展方法来创建自定义的查询操作符。// 这里只是一个简单的示例,实际上它只是重新实现了Where方法 return source . Where(predicate);} } // 使用自定义的FilterBy方法 var filteredStudents = students . FilterBy(s => s . Age > 20);// 这里只是一个简单的示例,实际上它只是重新实现了Where方法// 使用自定义的FilterBy方法。

2024-07-15 10:56:16 890

原创 WPF自定义控件

接下来,我们为MyButton添加一个触发器,当鼠标悬停在按钮上时改变其背景色。-- 之前的Setter设置 -->-- 添加触发器 -->-- 之前的Setter设置 -->-- 添加触发器 -->-- 之前的Setter设置 -->-- 添加触发器 -->-- 之前的Setter设置 -->-- 添加触发器 -->-- 之前的Setter设置 -->-- 添加触发器 -->

2024-07-15 08:00:00 1161

原创 C# 泛型

泛型:是一种程序特性,定义时不对类型做出明确的规定,使用时规定且不能改变。一般应用:泛型集合、泛型方法、泛型类、泛型委托。泛型方法:方法的返回值类型、参数类型定义成泛型类型。泛型集合:如List。非泛型集合中可以添加任意类型,但对于数据本身来说,这是非常不安全的,并且存在装箱和拆箱问题。装箱:将值类型的元素放到集合中会被转换成object类型。拆箱:将一个集合的元素取出来,但这个元素本身是值类型,必须进行强制类型转换。

2024-07-10 22:32:54 484

原创 C# 委托和事件

委托是一种特殊的类型,用于安全地封装一个或多个方法,并将这些方法作为参数进行传递或调用。委托是方法的引用,可以看作是指向方法的指针。事件是委托的进一步封装,用于在类或对象之间传递消息。事件是类的一部分,通过event关键字声明。

2024-07-10 17:37:23 2111

原创 C# IOC容器、依赖注入和控制反转

控制反转是一种设计原则,它反转了传统编程中的控制流程。在传统的编程模式中,组件之间的依赖关系是由组件自身在内部创建和维护的。而在控制反转模式中,这种依赖关系由外部容器(如Spring框架、.NET中的Microsoft.Extensions.DependencyInjection等)来管理,组件不再负责自己的依赖,而是通过外部容器来注入所需的依赖。

2024-07-10 15:47:00 794

原创 C# 反射

set;set;// 自定义序列化方法,使用反射获取属性值// 输出类似 "{Id: 1, Name: Test}"// 假设有一个反序列化方法(这里省略实现细节)get;set;get;set;// 自定义序列化方法,使用反射获取属性值 string serialized = SerializeObject(obj);

2024-07-10 15:14:45 911

原创 SQL MySQL定时器/事件调度器(Event Scheduler)

事件调度器(Event Scheduler)在MySQL数据库系统中是一个强大的功能组件,它允许用户定义一系列称为“事件”的数据库对象,这些事件在指定的时间或时间间隔自动执行预定义的SQL语句或操作。事件调度器通过维护一个时间计划表来管理这些事件的执行,从而实现了数据库操作的自动化和定时化。事件(Event):在MySQL中,事件是一个数据库对象,它定义了要执行的SQL语句(或一组SQL语句)以及这些语句的执行时间和条件。事件可以是一次性的,也可以是周期性的,根据定义的时间计划来触发执行。事件调度器(Eve

2024-07-10 11:32:08 1505

原创 SQL 自定义函数

- MySQL 示例:创建一个标量函数,该函数接收两个整数参数并返回它们的和BEGINEND$$DELIMITER;注意:在MySQL中,你可能需要更改DELIMITER以便在函数定义中使用分号(;)作为语句分隔符,因为函数体内部可能会包含多个语句。-- SQL Server 示例:创建一个标量函数,该函数接收两个整数参数并返回它们的和@Num1 INT,@Num2 INTASBEGINENDGO注意:在SQL Server中,不需要更改分隔符,因为函数体通常只包含一个。

2024-07-10 11:15:21 1285

原创 SQL 存储过程

SQL(Structured Query Language)的存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,它经编译后存储在数据库中,用户通过指定存储过程的名字并给它传递参数(如果有的话)来执行它。存储过程可以视为数据库中的一个程序或函数,它封装了复杂的业务逻辑,可以被多次调用,而不需要每次都编写相同的SQL语句集。

2024-07-09 14:47:46 722

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除