14-C#.Net-设计模式-学习笔记

C#常用面试题14道 它将现实世界中的事物抽象成对象,通过定义对象的属性(数据)和行为(方法),以及对象之间的关系和交互,实现软件系统的模块化、可维护性和可扩展性。通过使用泛型,我们可以在编译时指定具体的类型,并在运行时获得类型安全和高效的代码执行。在C#中,属性(Property)是一种特殊的成员,用于封装类的字段,并提供对其读取和写入的访问方式。属性允许我们在访问类的字段时使用类似于字段的语法,同时可以在属性的 getter 和 setter 中添加逻辑以控制对字段的访问。选择适当的集合类型取决于数据结构和操作的要求。 阅读详情

基于 GOF 23 种设计模式,结合 War3 / 银行 / 请假审批等实际场景讲解。
分三大类:创建型、结构型、行为型。


一、创建型设计模式

1. 简单工厂(Simple Factory)

核心思想:把 new 对象的逻辑集中到一个工厂类,调用方只需传参,不用关心具体类型。

场景:War3 游戏选种族,调用方不想写 new Human() / new Undead(),只想说"给我一个人族"。

// 调用方
IRace race = SimpleFactory.CreateInstance(SimpleFactory.RaceType.Human);
race.ShowKing();
// 工厂内部
public static IRace CreateInstance(RaceType raceType)
{
    switch (raceType)
    {
        case RaceType.Human:  return new Human();
        case RaceType.Undead: return new Undead();
        case RaceType.NE:     return new NE();
        case RaceType.ORC:    return new ORC();
        default: throw new Exception("wrong raceType");
    }
}

进阶:配置文件 + 反射,连枚举都不用改,直接读配置文件里的类名,用反射创建实例:

Assembly assembly = Assembly.Load(configString.Split(',')[1]);
Type type = assembly.GetType(configString.Split(',')[0]);
return (IRace)Activator.CreateInstance(type);

缺点:新增种族必须改工厂类的 switch,违反开闭原则(对修改关闭)。简单工厂转移了矛盾,但没有消除矛盾,而且还集中了矛盾。


2. 工厂方法(Factory Method)

核心思想:定义一个工厂接口,每个具体产品对应一个具体工厂类,新增产品只需新增工厂,不改原有代码。

public interface IFactory
{
    IRace CreateInstance();
}

public class HumanFactory : IFactory
{
    public virtual IRace CreateInstance() => new Human(123, DateTime.Now, "123");
}

public class UndeadFactory : IFactory
{
    public IRace CreateInstance() => new Undead();
}

调用方:

IFactory factory = new HumanFactory();
IRace race = factory.CreateInstance();

优点:扩展新种族只加新工厂类,不动旧代码。缺点:每个产品都要一个工厂类,类数量膨胀。


3. 抽象工厂(Abstract Factory)

核心思想:一个工厂不只生产一种产品,而是生产一族相关产品(种族 + 军队 + 资源)。

public abstract class AbstractFactoryBase
{
    public abstract IRace CreatRace();
    public abstract IArmy CreateArmy();
    public abstract IResource CreateResource();
}

public class HumanFactoryAbstract : AbstractFactoryBase
{
    public override IRace CreatRace()       => new Human();
    public override IArmy CreateArmy()      => new HumanArmy();
    public override IResource CreateResource() => new HumanResource();
}

调用方:

AbstractFactoryBase factory = new HumanFactoryAbstract();
IRace race       = factory.CreatRace();
IArmy army       = factory.CreateArmy();
IResource res    = factory.CreateResource();

优点:扩展新种族(产品族)很方便,加一个工厂类即可。缺点:扩展新产品类型(比如加个 IHero)需要改所有工厂类,这叫"倾斜性可扩展"——对产品族扩展友好,对产品类型扩展不友好。


4. 单例模式(Singleton)

核心思想:保证一个类在整个程序生命周期内只被实例化一次,节省资源。

理解单例的必要性,可以想象一个构造函数非常耗时耗资源的类(比如内部要循环计算、建立连接),如果每次用到都 new 一个,性能会很差。单例确保只构造一次,后续复用同一个实例。

常见实现方式:

// 饿汉式(线程安全,程序启动就创建)
public class Singleton
{
    private static readonly Singleton _instance = new Singleton();
    private Singleton() { }
    public static Singleton Instance => _instance;
}
// 懒汉式 + 双重检查锁(延迟创建,线程安全)
public class Singleton
{
    private static volatile Singleton _instance;
    private static readonly object _lock = new object();
    private Singleton() { }
    public static Singleton Instance
    {
        get
        {
            if (_instance == null)
            {
                lock (_lock)
                {
                    if (_instance == null)
                        _instance = new Singleton();
                }
            }
            return _instance;
        }
    }
}

注意:获取对象实例的几种方式:new → 反射 → IOC(反射) → 克隆 → 反序列化。


二、结构型设计模式

5. 适配器模式(Adapter)

核心思想:已有一个接口规范(IHelper),但引入的第三方类(RedisHelper)方法名不一样,不能直接用。适配器就是"包一层",让第三方类也能满足接口规范。

场景:系统统一用 IHelper(Add/Delete/Update/Query),但 Redis SDK 的方法叫 AddRedis/DeleteRedis,需要适配。

两种实现方式:

① 类适配器(继承):

public class RedisHelperInherit : RedisHelper, IHelper
{
    public void Add<T>()    => base.AddRedis<T>();
    public void Delete<T>() => base.DeleteRedis<T>();
    public void Update<T>() => base.UpdateRedis<T>();
    public void Query<T>()  => base.QueryRedis<T>();
}

缺点:继承是强侵入性,子类会暴露父类所有方法(包括 AddRedis 这种不该暴露的)。

② 对象适配器(组合):

public class RedisHelperCombination : IHelper
{
    private RedisHelper _redisHelper = new RedisHelper();
    public void Add<T>()    => _redisHelper.AddRedis<T>();
    public void Delete<T>() => _redisHelper.DeleteRedis<T>();
    // ...
}

优点:组合可以面向抽象(依赖接口而非具体类),更灵活。

结论:组合优于继承。继承是强侵入性、灵活性差,组合依赖抽象更好。


6. 代理模式(Proxy)

核心思想:不直接访问真实对象,通过代理对象来访问,代理可以在前后加入额外逻辑(日志、缓存、鉴权、事务等)。

场景:RealSubject 是火车站(构造耗时、查票耗时),ProxySubject 是票务代理,帮你加了缓存和异常处理。

public class ProxySubject : ISubject
{
    // 单例代理:RealSubject 只实例化一次
    private static ISubject _iSubject = new RealSubject();

    public void DoSomething()
    {
        try
        {
            Console.WriteLine("Before DoSomething");
            _iSubject.DoSomething();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
            throw;
        }
    }

    public bool GetSomething()
    {
        // 缓存代理:第一次查询后缓存结果
        string key = $"{nameof(ProxySubject)}_{nameof(GetSomething)}";
        if (CustomCache.Exist(key))
            return CustomCache.Get<bool>(key);

        bool result = _iSubject.GetSomething();
        CustomCache.Add(key, result);
        return result;
    }
}

代理的常见用途:单例代理、缓存代理、延迟加载、鉴权、事务、监控。

重要:AOP(面向切面编程)大部分都是基于代理实现的。


7. 装饰器模式(Decorator)

核心思想:在不修改原有类的前提下,动态地给对象添加功能,且功能的数量和顺序可以随意组合。

场景:学员上课,基础是直播学习,可以按需叠加:看视频、在线答疑、作业巩固。

关键设计:装饰器既继承了 AbstractStudent(装饰后还是一个学生),又组合了一个 AbstractStudent(业务功能来自内置的学生)。

public abstract class AbstractDecorator : AbstractStudent
{
    private AbstractStudent _student;
    public AbstractDecorator(AbstractStudent student) { _student = student; }
    public override void Study() => _student.Study(); // 委托给内部对象
}

public class StudentDecoratorVideo : AbstractDecorator
{
    public StudentDecoratorVideo(AbstractStudent student) : base(student) { }
    public override void Study()
    {
        base.Study();                          // 先执行原有逻辑
        Console.WriteLine("获取视频代码...");  // 再追加新功能
    }
}

使用方式(像套娃一样叠加):

AbstractStudent student = new StudentVip() { Name = "张三" };
student = new StudentDecoratorVideo(student);    // 加视频
student = new StudentDecoratorAnswer(student);   // 加答疑
student = new StudentDecoratorHomework(student); // 加作业
student.Study(); // 执行时会依次调用所有功能

和代理的区别:

  • 代理:控制对对象的访问,通常代理和被代理是固定关系
  • 装饰器:动态扩展功能,可以任意叠加、调整顺序

三、行为型设计模式

8. 责任链模式(Chain of Responsibility)

核心思想:把多个处理者串成一条链,请求沿链传递,每个处理者决定自己处理还是传给下一个,调用方只需把请求交给链头。

场景:员工请假审批,PM 能批 8 小时内,主管批 24 小时内,经理批 100 小时内,超出就往上传。

public abstract class AbstractAuditor
{
    private AbstractAuditor _nextAuditor;
    public void SetNext(AbstractAuditor auditor) => _nextAuditor = auditor;
    protected void AuditNext(ApplyContext ctx)
    {
        _nextAuditor?.Audit(ctx); // 传给下一个
    }
    public abstract void Audit(ApplyContext ctx);
}

public class PM : AbstractAuditor
{
    public override void Audit(ApplyContext ctx)
    {
        if (ctx.Hour <= 8)
            ctx.AuditResult = true;
        else
            base.AuditNext(ctx); // 超出权限,往上传
    }
}

组装链(在调用方):

PM pm = new PM() { Name = "王国建" };
AbstractAuditor ceo = new CEO() { Name = "李哥" };
pm.SetNext(ceo); // 可以任意定制流程

pm.Audit(context); // 只需交给链头

优点:

  • 调用方不需要知道谁来处理,只管提交
  • 链的组装可以灵活配置,随时调整审批层级
  • 每个处理者只关心自己的逻辑,互不依赖

责任链模式是行为型设计模式中扩展性最强的一个,核心思想是无止境的行为封装转移——每个节点只负责自己的判断,超出范围就往后传。


9. 模板方法模式(Template Method)

核心思想:在父类中定义一个算法的骨架(流程),把其中变化的步骤延迟到子类实现。

场景:银行查询余额,流程固定(验证 → 查余额 → 算利息 → 展示),但不同客户类型利率不同、展示方式不同。

public abstract class AbstractClient
{
    // 模板方法:固定流程
    public void Query(int id, string name, string password)
    {
        if (CheckUser(id, password))
        {
            double balance  = QueryBalance(id);
            double interest = CalculateInterest(balance); // 变化点
            Show(name, balance, interest);                // 变化点
        }
    }

    public bool CheckUser(int id, string password) => true;   // 公共逻辑,写死
    public double QueryBalance(int id) => new Random().Next(10000, 1000000); // 公共逻辑

    public abstract double CalculateInterest(double balance); // 必须子类实现
    public virtual void Show(string name, double balance, double interest)   // 可选覆盖
    {
        Console.WriteLine($"尊敬的{name},余额:{balance},利息:{interest}");
    }
}

子类只需实现变化的部分:

public class ClientVip : AbstractClient
{
    public override double CalculateInterest(double balance) => balance * 0.005;
    public override void Show(string name, double balance, double interest)
        => Console.WriteLine($"尊贵的{name} VIP客户,余额:{balance},利息:{interest}");
}

public class ClientRegular : AbstractClient
{
    public override double CalculateInterest(double balance) => balance * 0.003;
    // Show 不覆盖,用父类默认实现
}

三种方法的使用规则:

  • 所有子类都相同 → 普通方法,写在父类
  • 所有子类都不同 → abstract 方法,子类必须 override
  • 部分子类不同 → virtual 方法,按需 override

10. 观察者模式(Observer)

核心思想:被观察者(Subject)维护一个观察者列表,当自身状态变化时,通知所有观察者。观察者和被观察者之间松耦合。

场景:猫叫一声,触发老鼠跑、狗叫、婴儿哭、小偷躲……

演进过程:

第一版(硬编码,强依赖):

public void Miao()
{
    new Mouse().Run();
    new Baby().Cry();
    new Dog().Wang();
    // 猫直接依赖所有观察者,耦合严重
}

第二版(观察者接口 + List):

public interface IObserver { void Action(); }

// Cat 内部
private List<IObserver> observerList = new List<IObserver>();
public void AddObserver(IObserver observer) => observerList.Add(observer);
public void MiaoObserver()
{
    foreach (var observer in observerList)
        observer.Action(); // 猫不知道谁在监听,只管通知
}

第三版(C# 委托/事件,最优雅):

public event Action MiaoHandler;
public void MiaoEvent()
{
    foreach (Action observer in MiaoHandler?.GetInvocationList())
        observer.Invoke();
}

// 调用方注册
cat.MiaoHandler += new Baby().Cry;
cat.MiaoHandler += new Dog().Wang;
cat.MiaoEvent();

优点:

  • 观察者数量可以随意增减
  • 顺序可以调整
  • 被观察者不依赖任何具体观察者

四、三种模式的对比(容易混淆)

模式关系目的
适配器包一层,接口转换让不兼容的接口能一起工作
代理包一层,控制访问在访问前后加通用逻辑(日志/缓存/鉴权)
装饰器包一层,动态扩展灵活叠加功能,顺序可调

适配器、代理、装饰器三者结构相似,区别在于意图不同。


五、核心设计原则(贯穿所有模式)

  • 面向抽象编程:依赖接口/抽象类,不依赖具体实现(IRace iRace = new Human() 而不是 Human human = new Human())
  • 开闭原则:对扩展开放,对修改关闭
  • 组合优于继承:继承是强侵入性,组合更灵活
  • 单一职责:每个类只做一件事,变化的逻辑封装转移出去
  • 里氏替换原则:子类可以替换父类使用
.NET23种设计模式【完整】 立即下载

相关推荐

伺服驱动器485通信

485通信使用方法,485通信在上位机和伺服驱动器之间的应用,根据需要驱动电机旋转。

haipi511715316的博客 1万+

.NET 开发中最常用的设计模式

设计模式是软件开发人员在开发过程中面临的常见问题的一组最佳实践和解决方案。这些模式通常是可重用的,并且可以应用于不同的项目。设计模式不是语言功能或库,而是一种组织代码以使其更易于维护、可扩展和可重用的方式。它们通常分为三种类型:创造模式、结构模式和行为模式。创建模式处理对象创建机制,尝试以适合情况的方式创建对象。结构模式处理对象组成,行为模式处理对象之间的通信。

学以致用 知行合一 3128

计算机视觉——SIFT特征匹配

文章目录一、SIFT特征检测原理1.1基本思想1.2二、SIFT特征检测图片兴趣点三、SIFT特征检测描述子匹配四、输入图片检测与之 一、SIFT特征检测原理 1.1基本思想 1.2 二、SIFT特征检测图片兴趣点 代码: 检测结果: 三、SIFT特征检测描述子匹配 四、输入图片检测与之 ...

weixin_43869874的博客 3853

.net之设计模式

在上一篇文章里我通过具体场景总结了“.net面向对象的设计原则”,其中也多次提到一些设计模式方面的技术,可想而知,设计模式在我们的开发过程中也是必不可少的。今天我们就来简单交流下设计模式。对于设计模式的介绍呢,网上流行这么一句话“想要搞好对象,必须要熟知套路”,所以百度中说设计模式简介时“设计模式一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结”一点也没错,在开发过程中通过渗入一些设计模式,我们的设计效果又会怎么样呢?话不多说,直接进入正题吧! 一、设计模式的分类 ...

whyrookie的博客 2091

解决win11无法安装.net framework 3.5(包括.net2.0和3.0)错误代码:0x80070005

解决win11无法安装.net framework 3.5(包括.net2.0和3.0)错误代码:0x80070005

zeng699304的博客 2万+

从选卡到验证:CST仿真GPU加速全流程实战指南

本文详细介绍了CST仿真中GPU加速的全流程实战指南,从硬件选型到软件配置,再到性能验证和常见问题排查。通过对比专业卡与游戏卡的性能差异,提供硬件选型建议,并分享驱动安装、关键设置及CST软件配置的黄金法则,帮助用户显著提升仿真效率。

weixin_30650039的博客 394

.NET 23种设计模式

创建型 1. Factory Method(工厂方法)   意图: 定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method 使一个类的实例化延迟到其子类。 适用性: 当一个类不知道它所必须创建的对象的类的时候。 当一个类希望由它的子类来指定它所创建的对象的时候。 当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类

Java_c# 2886

MTK(基础篇)ROM烧录以及分区的作用

本文介绍了MTK芯片设备的刷机流程及关键分区功能。首先通过MTK烧录工具加载ROM文件(包括引导文件和分区表),重点解析了各分区的核心作用:preloader类似BIOS负责硬件初始化;lk作为二级引导程序加载内核;vbmeta验证系统完整性;boot包含Linux内核;dtbo调整硬件配置;modem管理通信功能;tee保护生物识别数据;system/vendor分别存放系统核心和硬件驱动。特别指出preloader、vbmeta等关键分区损坏会导致设备变砖,而recovery分区是重要的救砖入口。全文简

weixin_49303682的博客 443

设计模式大全

  Longronglin之设计模式:Christopher Alexander 说过:“每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动”。模式描述为:在一定环境中解决某一问题的方案,包括三个基本元素--问题,解决方案和环境。阅读类图和对象图请先学习UML创建模式 结构模式 行为模式创建模式:对类

马如林的IT博客 8万+

ubuntu 20.04 搭建多用户远程桌面共享及同时在线使用

摘要:本文介绍了在物理机上配置远程桌面访问的完整流程。通过setup_xrdp.sh脚本自动安装xrdp服务,修改配置文件并开放3389端口。同时提供了用户管理脚本:add_rdp_users.sh用于创建带sudo权限的远程用户,del_rdp_users.sh用于删除用户及主目录。还包含批量操作脚本add_rdp_all.sh和del_rdp_all.sh,支持一次性创建/删除多个用户(如dev1-dev5),所有用户密码统一设置为111111。完整方案实现了远程桌面环境的快速部署和用户集中管理。

621

11.嵌入式控制器EC实战 KBC矩阵键盘Keyboard开发流程

文章目录笔记本矩阵键盘概述矩阵键盘的扫描方式行列扫描方式逐行逐列扫描方式EC中矩阵键盘是如何扫描并得到码值的(代码分析) 笔记本矩阵键盘概述 在EC中支持两种形式的键盘,一种是PS/2接口的键盘,这种键盘几乎已经被USB接口的键盘所取代,所以PS/2接口的键盘不在我们的讨论范围。 另一种键盘则是矩阵键盘,也是笔记本电脑的内置键盘,该键盘类似于学习单片机时使用的4*4的那种键盘,笔记本使用的矩阵键盘有三种规格,分别是16*8、17*8和18*8。16、17和18代表着该款键盘的列数,8代表着键盘的行数,我们这

qq_30135687的博客 3809

.net 有哪些主流的设计模式_「设计模式」组合模式详解

前言《设计模式自习室》系列,顾名思义,本系列文章带你温习常见的设计模式。主要内容有:该模式的介绍,包括: 引子、意图(大白话解释) 类图、时序图(理论规范)该模式的代码示例:熟悉该模式的代码长什么样子该模式的优缺点:模式不是万金油,不可以滥用模式该模式的应用案例:了解它在哪些重要的源码中被使用该系列会逐步更新于我的博客和公众号(博客见文章底部),也希望各位观众老爷能够关注我的个人公众号:后端技术漫...

weixin_42520796的博客 1844

自助结账商品检测(Scanned Item Detection)——基于YOLOv8的RPC数据集实战

RPC数据集是由中国科学院自动化研究所发布的零售商品结账检测公开数据集,广泛用于自助结账和零售场景下的目标检测与识别。YOLOv8是YOLO系列最新版本,由Ultralytics推出,继承了YOLO家族的高效快速和高准确性,适用于实时检测场景。本文系统介绍了基于YOLOv8的RPC数据集自助结账商品检测方案,涵盖数据准备、训练、推理及UI界面设计。未来,可结合多模态感知、RFID融合技术,打造更加智能和稳定的自助结账系统。

YOLO 248

【C#探索】.NET10 C#14前瞻

【C#14新特性前瞻】文章摘要:.NETConf2025将发布.NET10正式版,C#14带来多项重要更新:1.全新扩展方法语法,支持方法、属性及运算符扩展,提升函数式编程体验;2.幕后变量(field)自动生成简化属性定义;3.Null条件分配支持安全赋值;4.改进的JSON序列化支持PipeReader;5.简单lambda参数支持out修饰符;6.用户自定义复合运算符和分部构造函数;7.字符串数字排序优化。这些改进使C#更简洁高效,同时增强函数式编程能力。

scixing的博客 679

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

C#_.NET10_C#14_新特性详解

维度亮点性能JIT 编译提升 37.5%,GC 暂停减少 52%语言字段支持的属性、扩展属性让代码更简洁AI完整的 Agent 开发框架,MCP 协议支持生态三年 LTS 支持,企业级应用的可靠选择对于 C# 开发者来说,现在正是升级到 .NET 10 的最佳时机。无论是追求极致性能,还是探索 AI 应用开发,.NET 10 都提供了强大的工具和平台支持。

qq_16416731的博客 581

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

基于.NET 10 和 C# 14 强化客户端应用的数据加密与保护

借助.NET 10 和 C# 14,开发者能够更有效地强化客户端应用的数据加密与保护。通过深入理解其原理,在实战中合理运用并避免常见坑点,可构建出更安全可靠的客户端应用。随着技术发展,持续关注并利用这些工具将是保障客户端数据安全的重要途径。

dotnethello的博客 1万+

基于.NET 10 和 C# 14 实现客户端应用的高效数据缓存策略

通过结合.NET 10 和 C# 14,开发者能够实现客户端应用的高效数据缓存策略。深入理解其原理,在实践中合理运用并避免常见坑点,可显著提升客户端应用的性能和用户体验。随着技术的发展,持续关注并利用这些技术将是打造优秀客户端应用的重要手段。

dotnethello的博客 8万+

利用 C# 14 与.NET 10 强化客户端应用的用户认证与授权

借助 C# 14 与.NET 10,开发者能够构建更强大、安全的客户端应用用户认证与授权机制。深入理解其原理,在实践中合理运用并避免常见坑点,可有效提升应用的安全性和用户体验。随着技术的发展,持续关注并利用这些技术将是保障客户端应用安全的重要方向。

dotnethello的博客 1万+

基于.NET 11 与 C# 14 的云原生边缘计算安全与性能优化

NET 11 与 C# 14 为云原生边缘计算带来了显著的性能提升与安全增强。通过深入理解其原理并在实战中合理应用,开发者能够构建更高效、更安全的云原生边缘计算应用。在实践过程中,注意规避性能与安全方面的潜在问题,充分发挥这些新技术的优势,满足云原生边缘计算领域日益增长的需求。#标签:#.NET 11 #C# 14 #云原生 #边缘计算 #性能优化 #安全增强。

dotnethello的博客 1万+

.NET 10深度解析:C# 14新特性与云原生开发实践

2025年2月,微软正式推出“.NET 10首个预览版”,标志着该框架在性能优化、语言特性及云原生支持上迈入新阶段。本文将从C# 14语言革新与云原生开发实践两个核心维度,剖析这一版本的技术价值与开发者机遇。一、C# 14:语法革新与效率跃升C# 14的更新聚焦于代码简洁性与运行时效率,为开发者提供了更灵活的编程范式。1. 语言特性增强· 未绑定泛型中的nameof支持:允许在泛型未绑定时获取类型...

dotNET跨平台 1094

基于.NET 11 与C# 14的高性能安全客户端应用开发

NET 11 和 C# 14 为高性能安全客户端应用开发提供了强大支持。通过理解其原理并在实战中合理运用,开发者能够构建出性能卓越且安全可靠的客户端应用。在开发过程中,要注意规避性能和安全方面的潜在问题,充分发挥这些新技术的优势,满足用户对客户端应用日益增长的性能和安全需求。#标签:#.NET 11 #C# 14 #客户端应用开发 #性能优化 #安全增强。

dotnethello的博客 1万+

运用 Semantic Kernel 与 C# 14 革新.NET AI 客户端开发体验

Semantic Kernel 与 C# 14 的结合为.NET AI 客户端开发带来了显著革新。通过深入理解二者原理,在实战中合理运用并避免常见问题,开发者能够打造出更高效、灵活且易于维护的 AI 客户端应用。随着 AI 技术的持续发展,这种组合有望成为.NET AI 开发的主流方式。

dotnethello的博客 2万+

.NET 10 的新特性_探索 C# 14、ASP.NET Core 和 .NET 10 中最有趣的新特性

本文介绍了C#和.NET生态中的多项新特性:1. C#14新增扩展成员功能,支持为类型添加属性、方法和事件;2. 空条件赋值简化空引用处理;3. 表达式树支持命名参数和可选参数;4. 复合赋值运算符允许自定义操作符。ASP.NET Core方面:1. 最小API支持数据注解验证;2. 新增服务器发送事件(SSE)支持。Blazor改进了路由配置,EF Core新增LeftJoin/RightJoin运算符和JSON类型支持。最后,.NET允许将应用程序存储在单个.cs文件中运行,无需项目文件。这些更新提升了

csdn_aspnet的专栏,请点击博客主页右上角三个点中的私信联系 5966

C#14虚拟线程支持.NET Framework吗?:一文说清跨版本兼容边界

本文解析C#14虚拟线程的兼容性问题,明确其仅支持.NET 8及以上版本,不适用于.NET Framework。帮助开发者厘清跨版本迁移边界,规避技术适配风险,提升并发性能,值得收藏。

FastCompile的博客 1100
上一篇: 13-C#.Net-设计模式六大原则-学习笔记
下一篇: 15-C#.Net-编程思想(POP-OOP-AOP-DDD)-学习笔记
似水明俊德
博客等级 码龄8年 247粉丝 276原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值