设计模式-工厂方法模式-编程思维
工厂方法模式是一种创建型设计模式, 提供一种统一的方式来创建对象, 调用者无需关心具体的构建细节 对象的创建过程被封装在工厂类中, 调用者只需要使用一个共同的接口来获取对象, 不需要直接使用new操作符 这样可以降低客户端和具体产品类之间的耦合度, 提高系统的可扩展性和可维护性 工厂方法模式的作用 定义统一的工厂接口, 实现了对象创建和使用的分离, 让客户端不需要知道具体的产品类名, 只需要知
morethink program
本编所涉及到的工具以及框架: 1、Visual Studio 2022 2、.net 6.0 P/Invok是什么? P/Invoke全称为Platform Invoke(平台调用),其实际上就是一种函数调用机制,通过P/Invoke就可以实现调用非托管Dll中的函数。 在开始之前,我们首先需要了解C#中有关托管与非托管的区别 托管(Collocation),即在程序运行时会自动释放内存; 非
微软发布 C# async/await 异步语法功能已经好久了,但是目前来看使用并不广泛。本人经过实践在开发过程中使用 async/await 一路到底确实很爽,而且也没有啥问题。但是在面对旧项目变更要使用些功能的时候可能会遇到同步方法调用异步方法的情况,本人在这种情况就发生调用没有响应的问题,并作些总结。 发生些问题的具体条件 asp.net 应用程序(控制台无法重现,winform、wpf
1.可空类型修饰符(?) 众所周知,在C#中引用类型可以使用一个null引用来表示一个不存在的值,比如 string str = null 是正确的; 但是值类型却不能为空,比如 int k = null 那么编译器就会报错; 为了让值类型也可以为空,就需要使用可空类型,即用可空类型修饰符 "?" 来表示,举例如: int? 表示可空的整形,DateTime? 表示可为空的时间。这样我们就可
1. 多态性定义 C#中的多态性是OOP(面向对象编程)的一个基本概念,它允许一个对象在不同情况下表现出不同的行为,以增强代码的可重用性和灵活性。 根据网上的教程,我们得知C#多态性分为两类,静态和动态。但实际上,C#没有严格的静态和动态多态性的分法。之所以这么分,还是为了我们便于理解,我们沿用这个思维来大概分类: 采用函数重载或运算符重载方法的,属于静态多态性; 采用虚方法、抽象方法、
1. 重写和覆盖的定义 1.1 重写(override)的定义 在C#中,用override关键字来重写一个父类中的虚方法或抽象方法。override关键字用于指示编译器,我要用派生类中的一个方法,重写基类中的同名方法。通过重写基类中的方法,可以实现多态性。有关重写与虚方法和抽象方法的详细示例,可移步C#虚方法和抽象方法示例。 override关键字的语法如下: public overrid
基于.NET Core + Jquery实现文件断点分片上传 前言 该项目是基于.NET Core 和 Jquery实现的文件分片上传,没有经过测试,因为博主没有那么大的文件去测试,目前上传2G左右的文件是没有问题的。 使用到的技术 Redis缓存技术 Jquery ajax请求技术 为什么要用到Redis,文章后面再说,先留个悬念。 页面截图 NuGet包 Microsoft.Ext
1. 抽象方法与虚方法的区别 先说两者最大的区别:抽象方法是需要子类去实现的。虚方法是已经实现了的,可以被子类覆盖,也可以不覆盖,取决于需求。因为抽象类无法实例化,所以抽象方法没有办法被调用,也就是说抽象方法永远不可能被实现。 如果需要了解虚方法及抽象方法具体的定义和语句,请移步:C#多态性学习,虚方法、抽象方法、接口等用法详解。 我们具体看个例子来帮助理解,首先是虚方法: public c
.NET Core WebApi接口ip限流实践 前言 之前一直想实现接口限流,但一直没去实现,然后刚好看到一篇文章是基于AspNetCoreRateLimit 组件的限流策略。这个组件不做多的介绍,想了解详情可以去访问官方网址或者原文地址,地址在文章底部,本文只讲实现。 实现接口限流步骤 导包 第一步 配置服务 由于需要再appsettings.json中去读取数据,所以需要在Program
设计模式是个老生常谈的话题, 不同的人对此有不同的看法 新手可能会觉得设计模式难以理解, 并且也只与编程语言有关, 或者只与前端后端有关, 适用范围很窄 或者就干脆觉得这玩意儿没啥卵用, 写了那么一大坨只是让代码变得复杂难懂, 不如直接复制黏贴删删改改来得方便 老手可能会觉得设计模式就是yyds, 写代码时不搞个什么模式就显得太low了 不管写什么东西都要分离出接口和实现, 搞一个战未来的模式
六大原则是设计模式的基石, 是后面所提具体的二十三种设计模式的指导思想 总则: 开放封闭原则 对扩展开放, 对修改封闭 当我们需要添加新的功能时, 可以通过添加新的代码或者模块来实现, 而不需要修改已有的功能模块, 这样可以避免新增的功能影响到原来已经在正常运行的功能 最简单的例子就是函数重载 public void Add(int i) { this.List.Add(i.ToStri
1、概念 哈希之所以广泛存在,是因为它能在绝大多数情况下可以在O(1)的时间复杂度中完成元素的查找。它的核心是数组,如果输入是一个自然数,那么当然可以在常数时间内搜索到自然数所对应的数组元素了。但在工程实践中,要查找的关键字往往都不是自然数,即使是自然数也有可能是很大的值。因此,只要我们提前把关键字转换为在固定较小范围内的自然数,就可以实现常数时间的查找。那么问题来了,如何实现该转换关系呢?这就
今天给大家推荐一个开源项目,基于.NetCore开发的、前后端分离、前端有Vue、Angular、MVC多个版本的快速开发框架。 项目简介 这是一个基于.NetCore开发的快速开发框架,项目采用模块化架构、最新的技术栈、项目高度封装了依赖注入、日志(Log4net、Nlog)、缓存(Redis)、身份认证、WebApi、权限授权、多数据库等模块,能让我们快速的应用于实际的项目,只需专注于业务开
IEnumerable static IEnumerable<int> CreateSimpleIterator() { yield return 10; for (int i = 0; i < 3; i++) { yield return i; ;
1 static double TakeSquareRoot(int x) 2 { 3 //return Math.Sqrt(x); 4 return x + 1; 5 } 6 7 static void Main(string[] args) 8 { 9 List<int> integers = new List<int>(
因为爬虫要解析 򈃌这种字体编码的值,下载到一个ttf文件,用百度字体编辑器 打开,可以看到每个字符对应的Unicode (数字下方 $23、$2A...这些), 我需要拿到这些映射关系,才能解析对应数字。所以我百度搜索C# 读取ttf文件的unicode但是没有找到答案。直到用google搜索“C# read ttf unicode”,找到了一个能解决我的问题的回答
1、对表的初始化 1 //创建表 2 DataTable table = new DataTable(); 3 //添加列 4 table.Columns.Add("ID", typeof(Int32)); 5 table.Columns.Add("Name", typeof(String)); 6
Java为了实现“一次编译,处处运行”的特性,把编译的过程分成两部分,首先它会先由javac编译成通用的中间形式——字节码,然后再由解释器逐条将字节码解释为机器码来执行。所以在性能上,Java通常不如C++这类编译型语言。 同样的,C# 通过特定语言编译器 将代码编译成中间语言 IL( intermediate language),然后通过 JIT(Just In Time) 将I