C# 中 ref 与 out 参数传递:核心区别与实战解析

C# 经典:ref 和 out 的区别详解 C#经典:ref 和 out 的区别详解 阅读详情

在 C# 中,参数传递方式是一个基础却极易产生误解的知识点,尤其是 ref 与 out。
很多初学者会简单地把它们理解为“按引用传递”,却忽略了编译器约束、数据流方向以及与引用类型的真实关系,从而在实际开发中频繁踩坑

本文将从以下三个层面系统梳理 ref 与 out:

  1. 核心语义与编译器约束
  2. 基础用法与实战示例
  3. 引用类型(尤其是 string)的特殊行为与本质原因

一、ref 与 out 的核心区别(从“数据流”理解)

ref 与 out 的共同点是:

方法可以直接操作“调用方变量本身”,而不是它的副本。

但二者的设计目标不同,因此编译器施加了不同的约束。

1️⃣ 核心差异对照表
对比维度refout
调用前是否必须初始化必须初始化不要求初始化
方法内是否必须赋值否是(强制)
数据流方向传入 + 传出仅传出
语义侧重点修改已有值生成新值
2️⃣ 本质总结
  • ref:双向传递
    -- 调用方负责初始化
    -- 方法可以读取、也可以修改
  • out:单向输出
    -- 调用方不关心初始值
    -- 方法必须负责赋值
    可以将二者理解为:

ref = “我给你一个值,你可以在它的基础上改”
out = “你来负责给我一个结果”


二、基础用法实战验证

1️⃣ 未带ref 和 out
 internal class Program
 {
     static void Main(string[] args)
     {
         string a = "123";
         List<int> i = new List<int>() { 1, 3, 12, 12, 1 };
         Person person = new Person() { Id = 1 ,Name = "邓培"};
         aAction(a, i,person);
         Console.WriteLine(a);
         Console.WriteLine(string.Join(" ", i));
         Console.WriteLine(JsonConvert.SerializeObject(person,Formatting.Indented));
         Console.ReadKey();
     }
     static void aAction(string a, List<int> i,Person person)
     {
         a = "123213";
         i = new List<int>() { 1, 21, 312, 312 };
         person.Name = "罗倩";
     }
 }

 public class Person
 {
     public int Id { get; set; }
     public string Name { get; set; }
 }

image

注意:整体修改值不会发生改变

image

2️⃣ ref:典型的“读 + 改”场景

class RefDemo
{
    static void Main()
    {
        int num = 10;          // 必须初始化
        Modify(ref num);
        Console.WriteLine(num); // 20
    }

    static void Modify(ref int value)
    {
        value *= 2;           // 既能读,也能写
    }
}

关键点:
  • num 在调用前必须有值
  • 方法内部可以使用该值进行计算
  • 修改结果会同步回调用方
3️⃣ out:典型的“只负责输出结果”
class OutDemo
{
    static void Main()
    {
        int result;           // 可不初始化
        CreateValue(out result);
        Console.WriteLine(result); // 100
    }

    static void CreateValue(out int value)
    {
        value = 100;          // 必须赋值,否则编译失败
    }
}

关键点:
  • 调用方无需提供初始值
  • 方法必须在返回前完成赋值
  • 编译器会强制检查

三、引用类型的特殊处理:常见误区澄清

很多问题并不来自 ref/out,而是来自对“引用类型传参”的误解。
1️⃣ 重要前提:默认情况下传的是什么?

C# 默认是“值传递”
对引用类型而言,传递的是引用本身的副本

也就是说:

  • 外部变量保存的是一个“引用”
  • 方法参数拿到的是这个“引用的拷贝”

四、无 ref / out 时的两种典型行为

场景一:修改引用指向 ❌(不生效)
class Demo
{
    static void Main()
    {
        // 初始化原始变量
        string s = "old value";
        List<int> list = new List<int> { 4, 5, 6 };
        
        // 调用方法尝试修改引用指向
        Change(s, list);
        
        // 输出结果:原始变量完全没变化
        Console.WriteLine(s); // 输出:old value
        Console.WriteLine(string.Join(",", list)); // 输出:4,5,6
    }

    static void Change(string s, List<int> list)
    {
        // 修改的是「参数副本」的引用指向
        s = "new value"; // 让参数s的副本指向新字符串
        list = new List<int> { 1, 2, 3 }; // 让参数list的副本指向新List
    }
}

调用后:
string 没变
List 没变

原因:
  • 修改的是参数副本的指向
  • 外部变量的引用未被改变
场景二:修改对象内容 ✅(生效)
class Demo
{
    static void Main()
    {
        // 初始化原始Person对象
        Person p = new Person { Id = 1, Name = "旧名字" };
        
        // 调用方法修改对象内容
        Change(p);
        
        // 输出结果:对象内容被修改
        Console.WriteLine(p.Name); // 输出:新名字
    }

    static void Change(Person p)
    {
        // 修改的是「对象内部状态」,而非引用本身
        p.Name = "新名字";
    }
}

class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
}
原因:
  • p 与外部变量指向同一对象
  • 修改的是对象内部状态,而非引用本身

五、string 为什么“像值类型一样”?

string 是引用类型,但它是:

不可变(immutable)对象

using System;

// 示例1:无 ref 时,修改 string 引用指向仅作用于方法内副本
class StringImmutableDemo
{
    static void Main()
    {
        // 1. 初始化原始字符串变量
        string originalStr = "123";
        Console.WriteLine($"【调用方法前】原始变量 originalStr = {originalStr}");
        // 输出:【调用方法前】原始变量 originalStr = 123

        // 2. 调用方法尝试修改字符串
        TryChangeString(originalStr);

        // 3. 调用方法后,原始变量无变化
        Console.WriteLine($"【调用方法后】原始变量 originalStr = {originalStr}");
        // 输出:【调用方法后】原始变量 originalStr = 123
    }

    /// <summary>
    /// 无 ref:修改的是方法内参数副本的引用指向
    /// </summary>
    static void TryChangeString(string strParam)
    {
        // 注意:不是修改原有"123"的内容,而是创建新字符串"456"
        strParam = "456";
        Console.WriteLine($"【方法内部】参数副本 strParam = {strParam}");
        // 输出:【方法内部】参数副本 strParam = 456
    }
}
运行输出
【调用方法前】原始变量 originalStr = 123
【方法内部】参数副本 strParam = 456
【调用方法后】原始变量 originalStr = 123

这不是“修改字符串”,而是:

  1. 创建新字符串 "456"
  2. 让变量 s 指向新对象

因此:

  • 不加 ref → 只修改局部副本
  • 加 ref → 才能修改外部引用指向

六、加 ref 后:修改引用指向生效

using System;
using System.Collections.Generic;

// 示例2:加 ref 后,修改 string/List 的引用指向生效
class RefChangeReferenceDemo
{
    static void Main()
    {
        // 1. 初始化原始变量
        string originalStr = "123";
        List<int> originalList = new List<int> { 9, 9 };

        Console.WriteLine("【调用方法前】");
        Console.WriteLine($"原始字符串 originalStr = {originalStr}");
        Console.WriteLine($"原始列表 originalList = [{string.Join(",", originalList)}]");
        // 输出:
        // 原始字符串 originalStr = 123
        // 原始列表 originalList = [9,9]

        // 2. 加 ref 调用方法,修改引用指向
        ChangeReference(ref originalStr, ref originalList);

        Console.WriteLine("\n【调用方法后】");
        Console.WriteLine($"原始字符串 originalStr = {originalStr}");
        Console.WriteLine($"原始列表 originalList = [{string.Join(",", originalList)}]");
        // 输出:
        // 原始字符串 originalStr = 456
        // 原始列表 originalList = [1,2,3]
    }

    /// <summary>
    /// 加 ref:直接操作原始变量的引用指向
    /// </summary>
    static void ChangeReference(ref string strParam, ref List<int> listParam)
    {
        // 直接修改原始字符串变量的指向(新建"456"并让原始变量指向它)
        strParam = "456";
        // 直接修改原始列表变量的指向(新建List并让原始变量指向它)
        listParam = new List<int> { 1, 2, 3 };
    }
}
运行输出
【调用方法前】
原始字符串 originalStr = 123
原始列表 originalList = [9,9]

【调用方法后】
原始字符串 originalStr = 456
原始列表 originalList = [1,2,3]
结果:
  • s 指向新字符串
  • list 指向新集合
本质:

ref 传递的不是“引用的副本”,而是引用变量本身


七、ref 与 out 的典型适用场景

适合使用 ref 的情况
  • 需要在原有值基础上修改
  • 需要替换引用类型的整体对象
  • 典型场景:交换变量、缓存对象复用
适合使用 out 的情况
  • 方法职责是“生成结果”
  • 不关心调用前的初始值
  • 返回多个值但不想定义新类型
bool success = int.TryParse("123", out int value);

八、实践注意事项(非常重要)

  • ref / out 必须 调用方 + 方法签名同时声明
  • out 在 C# 7+ 支持内联声明
  • 避免滥用
    --会降低可读性
    --会增加理解成本
    --优先考虑返回值或 DTO

总结(核心记忆点)

  • ref:双向传递,调用前必须初始化
  • out:单向输出,方法内必须赋值
  • 默认传递的是引用的副本
  • 修改对象内容 ≠ 修改引用指向
  • string 因不可变,行为更接近值类型
  • 修改引用指向 → 必须使用 ref / out

如果你能在脑中始终区分清楚这三点:

值 / 引用 / 引用的副本

那么 ref 与 out 将不再是坑,而是工具。

C#中“ref“关键字的使用 C#中"ref"关键字的使用 阅读详情

相关推荐

C# 面试问题大全:025. “ref”和“out”关键字有什么区别?

ref关键字:用于传递参数的引用,方法可以读取和修改传入的参数值。调用方法前必须初始化传入的参数。out关键字:用于传递参数的引用,方法必须为out参数赋值。调用方法前无需初始化传入的参数。主要区别ref需要初始化,out不需要。ref可以读取和修改参数值,out必须为参数赋值。ref适用于需要在方法内外共享数据的情况,out适用于只需要从方法中返回多个值的情况。

caifox的博客 1605

【C#】ref 关键字详解

创建一个对象首先会在内存栈中分配4个字节用来存储该对象在堆中存放的地址,然后根据对象成员类型在堆中分配对应的空间存储对象,获得一个堆中内存的地址存放在栈中分配的四个字节中。从代码示例中可以看到,当我们使用传值参数时在方法中对值类型 形参x增加,并不会影响到实参x,因为传值参数→值类型的时候是在内存中开辟一个新的地址把实参拷贝过去,当我们对形参进行修改其实是对拷贝的数据修改,不会影响到实参。值类型在内存中存在栈中,根据变量的类型不同,在栈中分配响应的字节。图片解释:(来自刘铁猛C#入门视频)

qq_35677688的博客 9343

C#中ref与out的区别:从参数传递本质到实战应用

C#方法参数默认按值传递,值类型复制内容,引用类型复制引用地址,这造成方法内重新赋值不生效的现象。ref和out则通过托管指针让方法直接操作调用方变量,解决多返回值与原地修改问题。二者差异在于实参初始化要求与方法内赋值义务:ref需已初始化且可读可写,out无需初始化且必须赋值。掌握这种设计语义有助于正确选择参数传递方式,规避async方法不支持ref/out、属性不能传参等常见陷阱。在TryParse、串口协议解析等场景中,合理运用out输出解析结果、ref维护偏移量,能有效提升代码可读性与工程效率。

weixin_32667955的博客 333

C#——ref

C#——ref关键字 ref 关键字指示按引用传递的值。 它用在四种不同的上下文中: 1.在方法签名和方法调用中,按引用将参数传递给方法。 2.在方法签名中,按引用将值返回给调用方。 3.在成员正文中,指示引用返回值是否作为调用方欲修改的引用被存储在本地,或在一般情况下,局部变量按引用访问另一个值。 4.在 struct 声明中声明 ref struct 或 readonly ref struct。 按引用传递参数 在方法的参数列表中使用 ref 关键字时,它指示参数按引用传递,而非按值传递。 ref 关

weixin_43945471的博客 3万+

C#中ref和out的本质区别:从参数传递到底层机制与实战应用

在C#开发中,参数传递机制是理解方法调用行为的基础。值类型默认按值复制,而引用类型传递的是对象引用的副本,这导致方法内对参数重新赋值不会影响外部变量。ref与out关键字则改变了这一规则,它们传递的是“变量本身”的存储位置,使方法能够直接修改调用方的变量。out在编译期强制方法内部必须赋值,天然适配TryParse等TryXXX模式,让多返回值语义更清晰。从底层看,out本质是带特殊标记的ref,二者在CLR层面共享同一套机制。掌握ref/out不仅有助于通过面试中关于参数传递的经典问答,还能在串口帧解析、

weixin_31960565的博客 220

Unity C#开发中ref与out关键字的本质区别与实战应用

在C#编程中,参数传递机制是理解方法调用的基础概念。按值传递会创建变量的副本,而按引用传递则直接操作原始内存地址,这为性能优化和特定场景提供了技术基础。ref和out关键字正是实现按引用传递的核心工具,它们通过传递变量地址而非值副本,避免了大型结构体的复制开销,在需要高效修改数据或返回多个结果的场景中具有重要技术价值。在Unity游戏开发中,这种机制常用于优化矩阵变换、物理计算等高频操作,以及实现多返回值方法等应用场景。本文通过热词“性能优化”和“结构体”切入,深入解析ref与out在编译层面的差异、典型使

weixin_34007906的博客 391

C#参数传递:out、ref与in详解

C# 中的 out、ref 和 in 修饰符用于引用传递。out 要求方法必须为参数赋值,适合返回多个结果;ref 允许方法修改已初始化的变量,实现双向数据传递;in 传递只读引用,适用于大型结构体。out 适合解析操作,ref 用于变量交换,in 优化只读大数据传递。实际应用中,优先使用返回值而非 out,ref 用于原地修改,in 处理大型只读数据。推荐在简单场景使用返回值,仅在需要返回多个相关结果时使用 out 参数。

weixin_44259499的博客 1021

C#参数传递机制:ref、out与params实战解析

参数传递是编程语言中的基础概念,直接影响程序性能和内存管理。在C#中,值类型默认通过拷贝传递,引用类型传递引用副本,而ref/out关键字允许直接操作原始数据。ref参数通过地址传递提升大结构体处理效率,out参数强制输出赋值确保可靠性,params语法糖则简化了可变参数处理。这些机制在数据库访问、图形计算等场景中尤为重要,合理使用可提升7%以上的性能。通过IL代码分析可见,编译器对不同的参数修饰符会生成特定指令,理解其底层原理有助于避免异步编程、反射调用中的常见陷阱。

weixin_34094282的博客 205

C# ref与out的深层区别:从参数传递到IL实现全面解析

在C#编程中,参数传递是基础而关键的概念。默认情况下参数按值传递,值类型复制数据,引用类型复制“坐标”,这导致很多开发者对引用传递产生误解。ref与out都允许方法直接操作调用方的变量,但语义截然不同:ref要求实参先初始化,适合双向传递;out则专注于输出结果,方法内必须完成赋值。从IL层面看,两者几乎一致,真正的区别来自编译器的强制规则。理解这些细节不仅有助于通过面试,还能在实际工程中优化性能——例如对大结构体使用ref或in参数避免复制开销,或利用out实现TryParse这类优雅模式。本文从参数传递

weixin_34210740的博客 377

C# 方法参数传递:ref、out、in 详解

这篇文章主要讲解了 C# 中方法参数传递的三种关键字:`ref`、`out` 和 `in`。普通参数传的是值的副本,方法内部修改不会影响外部变量;`ref` 表示调用者已经把变量初始化好,方法可以直接修改原变量;`out` 表示调用前变量可以没有值,方法内部必须给它赋值,常用于返回额外结果,比如 `int.TryParse`;`in` 则表示参数以只读方式传入,方法只能读取、不能修改。总结起来就是:`ref` 是“我有值,你帮我改”,`out` 是“我没值,你给我结果”,`in` 是“我有值,你只能看”。

2601_96519735的博客 636

C#中Ref与Out参数详解及实例演示

ref作为C#的关键字,用于修饰方法参数。其基本语法结构如下:// 方法体在调用时,调用方也必须使用ref关键字显式传递参数:说明:该分析器检测方法中是否使用了超过1个的ref或out参数。若超过阈值,将生成诊断警告,提示重构。C# 版本特性对ref/out的影响C# 7.0ValueTuple替代out参数C# 7.0增强ref能力,但也更可控C# 8.0。

weixin_42575109的博客 1178

C# 引用传递深度解析:ref与out关键字的原理、应用与最佳实践

C#中的引用传递机制:ref与out关键字详解 C#默认采用值传递,但通过ref和out关键字可实现引用传递。ref实现双向数据传递,要求调用前初始化参数,方法内可读写;out用于单向输出,调用前无需初始化,方法内必须赋值。两者都能避免大对象复制,提升性能。实际开发中应谨慎使用ref,优先考虑返回值或元组,并注意ref/out参数必须显式声明且不能用于异步方法。C# 7.2还引入了in关键字提供只读引用传递。正确使用这些机制可优化数据共享,但需权衡代码清晰度与性能需求。

德仔 2105

机械设计师必看:如何用Autodesk Inventor高效完成钣金设计(附实战案例)

本文为机械设计师详细解析了如何利用Autodesk Inventor Professional高效完成钣金设计。文章通过一个钣金防护罩的实战案例,系统介绍了从核心设计逻辑、建模流程、参数化技巧到工程图输出的完整工作流,旨在帮助设计师掌握智能化的设计方法,显著提升从概念到制造的设计效率与准确性。

honey的博客 1181

c#方法关键字,ref、out、int

摘要:C#中的ref、out和in关键字用于控制方法参数传递方式。ref允许方法修改调用者的初始化变量(双向传递);out强制方法为未初始化的变量赋值(单向输出);in传递只读引用以提高大值类型的性能(单向输入)。三者的主要区别在于变量初始化要求、数据流向和修改权限。ref适合修改变量,out用于返回多个结果,in用于只读访问。合理使用这些关键字可提升代码灵活性和性能,但需注意方法重载限制和兼容性问题。

weixin_66547608的博客 1510

热膨胀系数(CTE)的不同处理方法对于封装翘曲仿真的影响

随着技术的不断发展,芯片封装的集成度越来越高,尺寸也越来越大,随之而来的封装翘曲问题也越来越引起关注。影响芯片封装翘曲最主要的原因就是封装中不同材料热膨胀系数(CTE)的失配性,因此在进行封装翘曲仿真的过程中,如何使用材料的CTE值就变得尤为重要,会对仿真精度产生较大的影响。本文将对比不同CTE的处理方法给仿真结果带来的影响。

wangyubo1的博客 6855

lgv20刷twrp_LG港版v20 root

这是LG港版v20 root,整理了一下有关LG港版v20的官方固件包了,有没有需要的呢,这里把固件包整理一下也是方便大家以后好下载了,因此有一些机友还是不知道在哪里下载官方的rom包,在这里说的固件rom包也就是原版的系统包了,大家可以放心的使用,这些系统包也都是支持线刷的,大家下载下来解压出来根据里面的相关教程来操作就可以了,很简单的,如果你也需要的话就一起来看看吧。软件提示注意!! 此过程会...

weixin_33212263的博客 5387

C# 中 ref 与 out 参数详解:区别、常见错误与最佳实践

本文通过分数调整示例,对比C#中ref与out参数的使用差异。ref要求调用前变量已初始化,且可读可写;out无需初始化,但方法必须在所有路径上赋值。两者均实现引用传递,改变实参值。值参数为副本,不影响原值;引用与输出参数共享内存地址。建议:需读写时用ref,仅返回结果用out,优先考虑返回值。C#7.0+支持out var简化声明。

德仔 1769

fpga在线升级 linux_仅5000行Verilog代码、可在FPGA上跑轻量级Linux系统的RISC-V内核

本文发布于www.hackster.io,由东京理工大学的计算机学院开发,专用于教学与加速用(苏老师也一直认为这是RISC-V当前的主要方向)。目前市场上开源的RISC-V内核已经很多,但很少有公开的RISC-V计算系统是非常轻型且能跑Linux系统的。这一款RISC-V内核就可以运行在FPGA上,用Verilog编写的,需要很少硬件的资源就能跑起来,所以可以运行在一个低成本的FPGA上。来看一下...

weixin_34083807的博客 1866

【C#】面试官最爱问的 C# 细节:ref、out、in 到底有啥区别?

摘要:C#中的ref、out和in关键字用于按引用传递参数,实现方法与调用方共享内存。ref允许方法读写已初始化的变量,实现双向修改;out专为输出设计,方法必须赋值给未初始化的变量;in则提供只读引用,适合传递大型结构体以提升性能。三者各有优缺点:ref灵活但易引发副作用,out支持多返回值但增加复杂度,in高效安全但对小型数据无意义。使用时应根据需求选择,避免滥用。

德仔 1113

M1安装homebrew报错LibreSSL SSL_read: SSL_ERROR_SYSCALL, errno 54解决方法

在mac系统中,使用homebrew可以很方便的管理包。但按照官网的说明执行命令时总是报错原因是这个资源访问有问题,那么我们可以直接使用国内的镜像。给大家推荐一个中国科学技术大学的镜像站点,里面有各种资源https言归正传,开始踩坑。......

qq_42427085的博客 1455

基于STM32设计的老人摔倒检测报警系统【升级版】(235)

在 `235 基于STM32设计的老人摔倒检测报警系统(OneNet+MQTT)` 项目基础上增加了心率、血氧、体温测量3个功能。

1508

C#中out与ref的区别及应用解析

ref:读写双全,双向奔赴——调用前必初始化,方法内可读可改,适合修改已有值;out:只出不进,强制产出——调用前不初始化,方法内必赋值,适合多结果返回。本质上,ref和out的性能无差异(均传递内存地址),选择的核心是语义匹配:需基于原始值修改用ref,仅需输出多结果用out,遵循语义可大幅提升代码可读性和可维护性。

2303_77627465的博客 379

用 ABAP RAP + XCO 把 Excel 导入业务对象:从弹窗 Action 到 EML 落库与附件清理的完整实践

摘要:本文介绍了在SAP RAP框架下实现Excel批量导入功能的完整方案。通过XCO库的XLSX模块解析Excel文件,结合RAP的行为定义和Fiori Elements界面集成,构建了一个支持试运行、数据校验和自动合并的业务导入功能。方案采用RAP标准范式,包括Action参数设计、EML事务处理、附件管理以及异常消息反馈,实现了从文件上传到数据落库的端到端流程,既保证了系统稳定性,又提升了业务用户体验。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 271

理解 C# 函数参数的修饰符 ref / out / in

C# 参数修饰符对比:ref、out、in ref、out和in是C#中用于控制参数传递方式的关键字,主要解决默认传值的局限性。 ref:双向传递变量引用,调用前需初始化,函数内可读写。用于需要修改外部变量的场景。 out:单向输出参数,调用前无需初始化,函数内必须赋值。常用于多返回值方法。 in:只读引用传递,调用前需初始化,函数内不可修改。适用于大型值类型的高效只读访问。 三者区别: 初始化要求:ref/in需初始化,out不需要 操作权限:ref可读写,out只写,in只读 典型用途:ref修改变量,

一杯小可的博客 1849

使用cutoff包基于最小p值法方法计算最佳截断值(基于LIRI基因数据集) R语言

这个方法在生物学研究中具有重要的意义,能够帮助我们从大规模基因表达数据中准确地找到差异显著的基因。在上述代码中,calculate_p_values函数是一个自定义函数,用于计算差异表达基因的p值。在本文中,我们将介绍如何使用R语言的cutoff包来基于最小p值法方法计算最佳的截断值,以便筛选出差异显著的基因。通过以上步骤,我们成功地使用cutoff包基于最小p值法方法计算了最佳的截断值,并筛选出了差异显著的基因。最后,我们可以根据得到的最佳截断值将基因表达数据集进行筛选,提取出差异显著的基因。

ByteKnight的博客 1291

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C# out和ref区别详解:从原理到实战,彻底搞懂引用传递

参数传递方式是理解编程语言的核心基础。在C#中,默认采用按值传递,但引用类型与值类型的行为差异常常引发混淆。为了在方法内外共享同一变量,C#提供了out和ref关键字,它们让参数成为原始变量的别名,实现真正的引用传递。ref要求调用前初始化,强调双向读写;out则只需方法内赋值,专注纯输出场景,如TryParse模式。掌握它们不仅能写出更高效灵活的代码,还能避免大结构体拷贝的性能损耗。从底层原理、使用规则到实战示例与避坑技巧,系统梳理out与ref的差异,帮助开发者稳固基础,从容应对面试与项目中的参数传递问

weixin_42554408的博客 235

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

上一篇: 深入解析 C# 中 int? 与 int 的核心区别:可空值类型的本质与最佳实践
下一篇: 深入理解 C# 中的装箱与拆箱
bugcome_com
博客等级 码龄3年 32粉丝 131原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bugcome_com

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值