![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C#基础
文章平均质量分 69
C#基础笔记
0仰望星空007
Python、C++、C#、WPF/WinForm/Avalonia、OpenCV、VTK、ActiViz、AI人工智能与医学影像
展开
-
C#:IEnumerable、yield return 和惰性求值
例如,迭代器可以查询数据库,但不幸的是,它可能会更改数据,或者迭代两次可能会产生完全不同的结果!但我从惨痛经历中吸取了教训,不要依赖它——我曾经使用.Select()来转换集合,同时使用外部变量来跟踪每次迭代中的一小部分状态,然后当外部变量在方法中没有更新时,我感到非常困惑。如果您知道要访问每个值(例如,如果您使用foreach迭代它而不使用break或return),请尽早枚举它,方法是将IEnumerable强制转换为列表或数组类型。对于像我编写的这种简单的迭代器,从技术上讲,这样做是可以的。原创 2024-05-30 10:01:09 · 736 阅读 · 0 评论 -
C#关于多态性的详细讲解
多态性在C#中的重要性总结多态性是面向对象编程的重要特性之一,它允许不同对象对同一消息做出不同的响应,提高了代码的灵活性和重用性。在C#中,多态性可以通过继承与重写、抽象类与接口、委托与泛型等机制来实现,为我们提供了丰富的编程手段。多态性的优势和限制多态性使得代码更加灵活、可扩展和可维护,可以提高代码的质量和效率。然而,过度使用多态性可能会导致代码过于复杂,降低代码的可读性和可理解性。因此,在使用多态性时需要权衡利弊,根据具体的情况选择合适的实现方式。对未来多态性发展的展望和建议。原创 2024-04-08 11:44:00 · 1441 阅读 · 0 评论 -
C# 设计模式的七大原则详解
在 C# 编程中,设计模式的七大原则是保证代码质量和可维护性的基石。这些原则不仅仅是理论上的指导,更是在实际项目开发中的重要实践。本文将详细解释每个原则,并附上相应的 C# 示例代码,帮助读者更好地理解和应用这些原则。原创 2024-04-12 11:38:57 · 638 阅读 · 0 评论 -
使用 Tesseract 在 C# 中进行光学字符识别(OCR)
你可以根据需要对 Tesseract 进行自定义配置,例如设置识别的分辨率、识别模式等。// 只识别数字// 设置自定义变量本文只讲述了简单的使用方法,未涉及字库训练,识别的准确率与训练的字库有关。原创 2024-03-02 15:41:29 · 2889 阅读 · 0 评论 -
深入理解 C# 中的 Task:异步编程的利器
在软件开发领域,异步编程已经成为了一种必备的技能。通过异步编程,我们可以更加高效地利用系统资源,提高程序的性能和响应速度。而在 C# 中,Task 类型则是用于实现异步操作的核心工具之一。本文将介绍 C# 中 Task 的基本概念、使用方法和一些实际应用场景,帮助读者更好地掌握异步编程的技术。Task 是 C# 中用于表示异步操作的一种机制。它允许我们在后台执行操作,而不会阻塞主线程。通过 Task,我们可以更加高效地处理并发操作和异步 I/O 操作。原创 2024-03-02 15:55:24 · 1548 阅读 · 2 评论 -
C# 使用 RabbitMQ 的详细使用方法
RabbitMQ 是一个功能强大的消息队列系统,可用于在分布式系统中进行可靠的消息传递。本篇博客将详细介绍如何在 C# 中使用 RabbitMQ 实现各种消息队列操作,包括连接 RabbitMQ 服务器、创建通道、声明队列、发布消息以及消费消息等。RabbitMQ 是一个开源的消息代理软件,实现了 AMQP(Advanced Message Queuing Protocol)协议,提供了可靠的消息传递机制。原创 2024-03-02 16:26:40 · 2277 阅读 · 6 评论 -
探索C#中不同类型的锁及其使用方法
在多线程编程中,保证线程安全性是至关重要的。C#提供了多种锁的实现,每种锁都有其特定的用途和适用场景。本篇博客将介绍C#中常用的几种锁,并提供相应的代码示例。原创 2024-03-03 13:40:18 · 642 阅读 · 0 评论 -
深入了解C#中的垃圾回收(Garbage Collection)
在计算机科学中,内存管理是一项至关重要的任务。在传统的编程语言中,程序员必须手动分配和释放内存,这往往会导致内存泄漏或者悬挂指针等严重问题。为了解决这些问题,现代编程语言如C#引入了自动内存管理机制,其中最核心的部分就是垃圾回收。垃圾回收是一种自动管理内存的机制,它的主要目标是在程序运行时自动检测和释放不再被程序使用的内存,从而减少内存泄漏和提高程序的性能和稳定性。C#中的垃圾回收机制为开发人员提供了方便、安全且高效的内存管理方式。原创 2024-03-04 20:32:25 · 1702 阅读 · 0 评论 -
C#中的线程池详细介绍
前言一、工作原理1、线程池的创建和管理2、线程池队列的工作流程二、使用方法1、提交任务到线程池2、异步操作与线程池三、控制线程池的行为1、线程池的参数设置2、最大线程数和最小线程数的影响四、注意事项1、避免阻塞线程池线程2、异常处理和错误处理机制五、与异步编程模型的关系1、APM与线程池2、TPL与线程池六、总结线程池是一种用于管理和调度线程的机制,它在应用程序中起着重要的作用。原创 2024-03-04 20:46:20 · 1674 阅读 · 0 评论 -
在C#中使用Linq
LINQ(Language Integrated Query)是 C# 中一种强大的查询语言集成特性,它使得在编程语言级别对数据进行查询和操作变得更加简单和直观。通过 LINQ,开发人员可以使用类似 SQL 的语法来对各种数据源进行查询,包括集合、数据库、XML 等,从而提高代码的可读性、减少编写代码的工作量,并且更容易理解和维护。本文将全面介绍 LINQ 的各种用法和优势。原创 2024-03-05 20:23:03 · 1692 阅读 · 1 评论 -
C#中使用 Prism 框架
Prism 框架是一个用于构建可维护、灵活和可扩展的 XAML 应用程序的框架。它提供了一套工具和库,帮助开发者实现诸如依赖注入、模块化、导航、事件聚合等功能。使用 Prism 可以帮助我们构建具有良好结构的应用程序,并且使得代码更易于理解和维护。原创 2024-03-06 21:45:53 · 1188 阅读 · 1 评论 -
在C#中使用 Castle 实现 AOP
AOP 是一种编程范式,它通过将横切关注点(如日志记录、异常处理、事务管理等)从业务逻辑中分离出来,然后通过代理技术将它们动态地织入到代码中。这样,我们可以将通用功能从业务逻辑中解耦,提高了代码的复用性和可维护性。Castle 动态代理框架是一个强大的 .NET 动态代理框架,它允许我们在运行时创建代理对象,以便于在调用目标对象之前或之后执行一些操作。原创 2024-03-06 21:55:41 · 1109 阅读 · 0 评论 -
C#设计模式-适配器模式
C#设计模式-适配器模式原创 2022-11-08 19:16:24 · 666 阅读 · 0 评论 -
C#中的协变逆变
文章目录一、C#中的协变二、C#中的逆变一、C#中的协变众所周知,子类对象可以赋值给父类,例如string str = string.Empty;object obj = str;不会报错。如果换一种方式,代码如下:public class Father{ private string Name { get; set; }}public class Son : Father{ private string Name { get; set; }}class Prog原创 2022-05-16 14:42:50 · 1638 阅读 · 0 评论 -
C#代码改善的一些建议-(2)泛型、委托和事件
前言C#代码改善的一些建议建议6:避免在泛型类型中声明静态成员MyClass一个泛型类中有一个静态成员Count。MyClass.Count和MyClass.Count不是共有的成员。对于非泛型类型的以下代码:static void Main(string[] args){ MyClass class1 = new MyClass(); MyClass class2 = new MyClass(); Console.WriteLine(MyClass.Count);}class M原创 2022-05-10 18:55:12 · 83 阅读 · 0 评论 -
C#代码改善的一些建议-(1)基本语言要素篇
文章目录前言建议1:正确操作字符串1)确保尽量少的装箱2)避免分配额外的内存空间建议2:区别对待强制转型与as和is1)FirstType 和SecondType彼此之间通过转换操作符来完成转换2)FirstType是SecondType的基类建议3:区别readonly和const的使用方法1)const2)readonly建议4:为类型输出格式化字符串1)继承IFormattable,实现ToString方法2)继承IFormatProvider, ICustomFormatter来提供格式化器建议5:原创 2022-01-11 21:06:35 · 268 阅读 · 0 评论 -
C#写简单的IOC容器
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、IOC和DIP1.IOC2.DIP二、写一个超简单的IOC容器实例1.代码准备2.IOC容器3.调用结果总结前言IOC个人之前一直搞不明白,不够理解,写这篇文章也是为了加强学习。一、IOC和DIP1.IOCIOC中文叫做控制反转:一般开发,上端都依赖下端的对象,类似于在类中new一个其他类对象。这样上端对下端会有很强的依赖。控制反转就是将对下端对象的依赖转移到第三方容器,能够使程序拥有更好的扩展性。2.DIP原创 2021-11-16 15:42:57 · 5106 阅读 · 1 评论 -
C#设计模式-单例模式
下面展示一些 内联代码片。//保证整个程序中只存在一个实例方法1(原始“双检锁”):#region 单例private static readonly object lockObj = new object();private static StatisticsMainViewModel _instance;public static StatisticsMainViewModel Instance{ get { if (_instance == null)//原创 2021-08-31 10:01:30 · 91 阅读 · 1 评论 -
C#设计模式-观察者模式
观察者模式,观察者和被观察者,当被观察者进行一些行为时,所有观察它的观察者会产生联动事件。在上位创建对象,观察者之间低耦合。经典的猫叫事件,触发狗叫,老鼠跑! 内联代码片。using System;namespace ObseverModel{ public class Program { static void Main(string[] args) { Cat c = new(); Mouse m =原创 2021-08-27 18:55:41 · 128 阅读 · 1 评论 -
C#设计模式-责任链模式
根据例子直接上代码 内联代码片。using System;using System.ComponentModel;/// <summary>/// 责任链模式/// </summary>namespace ResponsibilityChainModel{ /* *责任链模式: *示例: *需求:公司员工小王需要请假,按照公司的规章制度,请假审批按请假时长不同而定,规则如下: *请假1天以内,由直属主管审批 *原创 2021-08-27 18:46:59 · 70 阅读 · 1 评论