C#函数参数修饰符out和in的用法详解

 更新时间:2025年11月28日 09:22:30   作者:代码掌控者  
在 C# 中,out 和 in 是两种非常有用的参数修饰符,它们各自有着独特的用途和优势,能够极大地提升我们的编程体验,或许很多人对这两个修饰符的作用还不太了解,今天就让我们一起来揭开它们神秘的面纱吧

前言

嗨,大家好!

前两天有小伙伴问:“在 C# 里函数传递参数时加上 outin 到底有什么用?”

这确实是个值得探讨的好问题!

在 C# 中,outin 是两种非常有用的参数修饰符,它们各自有着独特的用途和优势,能够极大地提升我们的编程体验。

或许很多人对这两个修饰符的作用还不太了解,今天就让我们一起来揭开它们神秘的面纱吧!

话不多说,直接进入正题!

out 参数修饰符

核心作用

out 参数的主要作用是突破 return 只能返回单一值的限制,使得函数可以返回多个结果。

如果你需要一个函数同时返回两个或更多的值,out 参数就是你的最佳选择之一。

比如下面这个例子,它同时返回了两个值:

private int OutTest(int a, out int b)
{
    b = a;  // 必须对 out 参数赋值
    a -= 100;  // 修改 a 的值
    return a;  // 返回 a 的新值
}

public void Main()
{
    int a = 2;
    int b;  // 声明 out 参数
    int c = OutTest(a, out b);  // 调用方法并传递 out 参数
    Console.WriteLine($"c 值 = {c}");  // 输出 c 的值
    Console.WriteLine($"b 值 = {b}");  // 输出 b 的值
}

运行结果如下:

使用规则

out 参数的使用很简单,主要是以下 2 条:

  1. out参数的设计意图是由被调用方法赋值,所以调用方传递的变量无需预先赋值,比如上例。
  2. 调用时需显式使用out关键字,例如上例中的 OutTest(a, out b)

应用场景

out 参数通常应用在下面这 2 个场景:

  1. 解析操作,比如C#的内置方法 int.TryParse(string, out int result)
  2. 需要返回多个计算结果的方法,比如坐标转换、状态码+结果分离等

in 参数修饰符

核心作用

in 的作用是传递一个只读的参数给方法,这意味着方法只能使用这个参数,而不能改变它的值。

这在处理大型结构体时非常有用,可以避免不必要的数据复制,从而提高性能。

如果你试图修改 in 参数的值,就会引发如下的错误:

但是,有一个特殊情况是,如果参数是一个类型,虽然你不能重新赋值这个参数,但可以改变参数的成员的数据,比如:

public class Point
{
    public int x;
    public int y;
}

private void InTest(in Point point)
{
    Point point2 = new Point();
    // point = point2; 	// 这行代码会导致编译错误
    point.x = 10;		// 这是允许的	
}

使用规则

使用 in 参数的规则也很简单:

  1. 方法不能对 in 参数重新赋值。
  2. 调用时可以显式使用in关键字,也可以省略。

应用场景

in 参数主要用于下成这 2 个场景:

  1. 需要确保方法不会意外修改输入参数时,比如数学库中的计算函数
  2. 在确定无需改变输入参数的情况下,使用 in 修饰符以改善性能,例如传递3D图形计算中的矩阵或向量

总结

总的来说,在 C# 中合理使用 outin 参数修饰符,不仅能优化代码性能,还能增强数据安全性,实现更灵活的参数传递逻辑。

到此这篇关于C#函数参数修饰符out和in的用法详解的文章就介绍到这了,更多相关C#参数修饰符out和in内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C#多态详解

    C#多态详解

    这篇文章主要介绍了C#中的多态,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-10-10
  • 探讨:如何使用委托,匿名方法对集合进行万能排序

    探讨:如何使用委托,匿名方法对集合进行万能排序

    本篇文章是对使用委托,匿名方法对集合进行万能排序进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • c# 钩子学习笔记

    c# 钩子学习笔记

    今天弄了一下c#的钩子,没弄好,但是钩子安装成功,可以捕获键盘事件。
    2011-04-04
  • C# 比较两个list 之间元素差异的常用方法

    C# 比较两个list 之间元素差异的常用方法

    这篇文章主要介绍了C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2025-07-07
  • C#计算矩阵的秩实例分析

    C#计算矩阵的秩实例分析

    这篇文章主要介绍了C#计算矩阵的秩实现方法,以实例形式较为详细的分析了C#计算矩阵秩的原理与实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-08-08
  • C#使用WinRar命令进行压缩和解压缩操作的实现方法

    C#使用WinRar命令进行压缩和解压缩操作的实现方法

    这篇文章主要介绍了C#使用WinRar命令进行压缩和解压缩操作的实现方法,涉及C#基于Process类操作WinRar命令的相关实现技巧,代码简洁实用,需要的朋友可以参考下
    2016-06-06
  • C#实现Base64处理的加密解密,编码解码示例

    C#实现Base64处理的加密解密,编码解码示例

    这篇文章主要介绍了C#实现Base64处理的加密解密,编码解码,结合实例形式分析了基于C#实现的base64编码解码操作相关技巧,需要的朋友可以参考下
    2017-01-01
  • 基于C#实现PDF按页分割文件和分页合并

    基于C#实现PDF按页分割文件和分页合并

    iTextSharp 是一个开源的 PDF 处理库,用于在 C# 程序中创建、编辑和处理 PDF 文件,本文将使用iTextSharp实现C# PDF分割与合并,感兴趣的可以了解下
    2025-03-03
  • 关于Flyweight模式应用实践的相关介绍

    关于Flyweight模式应用实践的相关介绍

    本篇文章,小编将为大家介绍Flyweight模式应用实践,有需要的朋友可以参考一下
    2013-04-04
  • C#获取打印机列表方法介绍

    C#获取打印机列表方法介绍

    这篇文章介绍了C#获取打印机列表的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07

最新评论