14-C#

.NET23种设计模式【完整】 立即下载

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

基于 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())
  • 开闭原则:对扩展开放,对修改关闭
  • 组合优于继承:继承是强侵入性,组合更灵活
  • 单一职责:每个类只做一件事,变化的逻辑封装转移出去
  • 里氏替换原则:子类可以替换父类使用
VxWorks环境搭建与学习:vxworks6.8和workbench3.2 VxWorks操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(RTOS),是嵌入式开发环境的关键组成部分。良好的持续能力、高性能的内核以及友好的用户开发环境,在嵌入式实时操作系统领域占据一席之地。它以其良好的可靠性和卓越的实时性被广泛地应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中,如卫星通讯、军事演习、弹道制导、飞机导航等。 阅读详情

相关推荐

团子杂记:SAP收入确认工具RAR(Revenue Recognition&Reporting)在新收入准则下的应用

SAP收入确认工具RAR知识分享

Lucas1211的博客 4281

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

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

学以致用 知行合一 3128

[运动规划算法]基于飞行走廊的轨迹优化

文章目录简介一、介绍二、原理飞行走廊生成三、项目演示参考 简介 Btraj是一个在线的四旋翼无人机的运动规划框架,主要用于未知环境中的自主导航。基于机载状态估计和环境感知,采用基于快速行进(FM *)的路径搜索方法,从基于构建的欧氏距离场(ESDF)中寻找路径,以实现更好的时间分配。通过对环境进行膨胀生成四旋翼无人机的飞行飞行走廊。使用伯恩斯坦多项式将轨迹表示为分段Bezier曲线,并将整个轨迹生成问题转换成凸问题。通过使用Bezier曲线,可以确保轨迹的安全性和高阶动力学可行性,可以将轨迹完全限制在安全

xiewf的博客 8062

.net之设计模式

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

whyrookie的博客 2091

第3版•系统集成项目管理工程师(中级) │ 告别迷茫!案例分析高分攻略

🥏第3版•系统集成项目管理工程师(中级) │ 告别迷茫!案例分析高分攻略

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 3867

pycharm一直选择不了conda正确路径弹框报错:latinit property envs_dirs has not been initialized...如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 2908

.NET 23种设计模式

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

Java_c# 2886

SPICE仿真软件:HSPICE_(22).HSPICE仿真案例分析

通过上述案例分析,我们可以看到HSPICE仿真软件在不同电路类型和仿真场景中的应用。无论是简单的直流分析、交流分析还是复杂的暂态分析,HSPICE都能提供详细的仿真结果,帮助我们更好地理解和优化电路设计。希望这些案例能够为读者提供实用的参考和指导,进一步提升使用HSPICE进行电路仿真的能力。输入文件的编写:确保输入文件格式正确,使用注释来解释每一部分的内容。分析类型的选择:根据电路的特点选择合适的分析类型,如.DC.AC和.TRAN。输出结果的设置:使用.print命令来指定需要输出的节点电压和支路电流。

kkchenjj的博客 1305

设计模式大全

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

马如林的IT博客 8万+

基于Matlab的无迹卡尔曼滤波惯性导航与DVL组合导航

航天航空领域中的惯性导航是一种基于惯性测量单元(Inertial Measurement Unit,IMU)的导航方法,可以提供航向、速度和位置等信息。深度/速度测量器(Doppler Velocity Log,DVL)是一种常用的传感器,可用于测量水下航行器的速度。通过将DVL与无迹卡尔曼滤波相结合,可以实现高精度的组合导航。本文介绍了基于Matlab的无迹卡尔曼滤波(UKF)惯性导航与DVL组合导航的方法。以上是一种简化的示例代码,您可以根据实际应用需求进行相应的修改和优化。

DevSavantX的博客 416

涨点神器:基于YOLOv8的SPD-Conv小目标检测实战教程——让低分辨率场景检测精度飙升

从代码修改到场景落地,每一步都围绕“提升检测精度”这个核心目标,而实际数据也证明了这项技术的强悍——它不是实验室里的花拳绣腿,而是能真正解决工业痛点的涨点神器。在实际场景中,比如无人机巡检的低分辨率航拍图中,对电线、小设备的检测,YOLOv8-SPD的漏检率降低了70%以上。落地时,只需将训练好的YOLOv8-SPD模型部署到边缘设备或云端,即可享受其在小目标、低分辨率场景下的强大性能。的特征融合模块中,通过插入SPD-Conv,让模型在处理小目标时,既能保留空间细节,又能增强通道维度的特征表达。

m0_71589036的博客 157

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

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

weixin_42520796的博客 1844

Allegro172版本DFM功能介绍

Allegro172版本提供了实时DFM检查的功能,让违反要求的地方实时以DRC的形式报出来,让加工不可加工因素在设计的时候同步避免。打开Constraint,选择Manufacturing, 所有DFM相关DRC都在这。把所有下面DRC开关(DFM,DFA,DFT)都选择on,选择OK。这个规则和物理和间距规则等等都没有关系,单独的一个加工规则。这些DRC大部分是正常的,正常的可以去修改规则来消除。等待DRC刷新,板子上会出现很多DRC,类似下图。下面介绍如何调用和产生DFM规则。一直往下点击next。

weixin_54787054的博客 1336

C# 14 Extensions 来了

目前的使用语法也比较早期,不排除现在的语法未来会发生变化,大家有什么意见和反馈可以在讨论区分享自己的看法哈。看上去就像是为类型增加了一个扩展属性,这两个示例相当于是给类型增加了实例扩展,声明。预期索引器应该会工作,但是目前版本中尚不支持索引器的扩展,在后续版本中可能会添加。目前对于索引器、自定义操作符以及事件尚未支持,后续的更新中会添加更多的扩展支持。这是一个普通的扩展方法,在静态类型,静态方法中,第一个参数是要扩展的类型实例。我们也可以为类型扩展,声明的时候就不需要参数了,同样的也是支持泛型的。

dotNET跨平台 407

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

C# 14 field keyword 让属性更简单

C# 14 field keywordIntrofield关键字在 .NET 9 里已经作为 C# 13 的一个预览版本可用C# 13 Preview 的 field keyword在 C# 14 中将正式推出,这一特性可以帮助我们简化很多属性的使用,尤其 C# 13 支持推出的比较晚,可能很多人都不知道,所以再介绍一下Samplefieldkeyword 特性是指在属性(Property)...

dotNET跨平台 271

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

我最喜欢的 C# 14 新特性

C# 14 引入的用户定义的复合赋值运算符,远不止是一个语法糖。它解决了 C# 长期以来在运算符重载方面的一个核心痛点,特别是在处理需要精细化管理的资源(如非托管内存、文件句柄等)时。性能提升:通过“就地修改”避免了不必要的临时对象分配和垃圾回收开销。安全性增强:从根本上消除了因临时对象而导致的资源泄漏风险,让我们不再需要依赖于不可预测的终结器来进行补救。它使得 C# 在高性能和底层交互编程方面更加得心应手,也让我们这些有 C++ 背景的开发者感到无比亲切。

kfashfasf的博客 1247

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

C# 14 中的新增功能

可以在 用户定义的复合赋值的功能规范中了解详细信息。

李赛赛的专栏 1226

C# 14 新增功能一览,你觉得实用吗?

今天咱们一起来看看在 C# 14 中新增的几个功能特性,是否给我们日常编码带了来便利。

专注于C#/.NET/.NET Core学习、工作、面试干货和实战教程分享。这里聚焦了大量的C#/.NET/.NET Core优质文章、开源项目、实用工具和学习、工作、面试心得。 891

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

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

qq_16416731的博客 581

C#高性能开发之类型系统:从 C# 7.0 到 C# 14 的类型系统演进全景

C# 7.0至C# 14.0的类型系统新增内容涵盖了值元组、Span、ReadOnlySpan、Memory、ReadOnlyMemory、可空引用类型、记录、本机大小整数、记录结构、内联数组等数据类型,以及只读结构、引用结构、必需成员、泛型数学支持等增强。自C# 7.0以来,C#语言在类型系统方面引入了众多新数据类型、类型构造和语言特性,以提升性能、类型安全性和开发效率。、可空引用类型、记录、本机大小整数、记录结构、内联数组,以及其他增强(如只读结构、泛型数学支持)。【工欲善其事,必先利其器!

weixin_42400904的博客 91

【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
上一篇: Vue3入门
下一篇: 02-C#
似水明俊德
博客等级 码龄8年 247粉丝 276原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值