参数的 in out in/out 修饰

Posted dhclly

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了参数的 in out in/out 修饰相关的知识,希望对你有一定的参考价值。

知识点

  • in
  • out
  • in/out

IN

一个函数,默认情况下,参数是 in 类型,即传入参数,以C# 中的方法为例:

不要怀疑,C#直接支持下面的写法:

static void Main(string[] args)
{
    Console.WriteLine(GetNewNum(5));
}

//默认是 in 类型 所以可以不写 in
public static int GetNewNum(in int num)
{
    return num + 10;
}

OUT

指定了此修饰符,则表示参数不是用于传参的,而是用于返回结果的,因为一般情况下,函数只能返回一个结果,此时就能通过 out方式通过参数返回多个结果,因为只是作为接收返回结果用,所以传入的参数不需要也不允许赋值,当然因为要传值回去,所以在return前必须赋值,例子如下:

static void Main(string[] args)
{
    int num2;
    Console.WriteLine(GetNewNum(out num2));
    Console.WriteLine(num2);
}

public static int GetNewNum(out int num2)
{
    num2 = 15;
    return 10;
}

当然现在返回多个参数可以使用 tuple(其实用dict list 作为返回参数也可以带多个参数)

static void Main(string[] args)
{
    var result = GetNewNum();
    Console.WriteLine(result.num);
    Console.WriteLine(result.num2);
}

public static (int num, int num2) GetNewNum()
{
    return (10, 15);
}

IN/OUT

IN/OUT 在C#中可能没听过,不过肯定听过 REF,其实就是这个,即传入的参数既能传值进来,还能传出去,因为要传值回去,所以在return 前必须赋值,例子如下:

static void Main(string[] args)
{
    int num = 5;
    var num2 = GetNewNum(ref num);
    Console.WriteLine(num);
    Console.WriteLine(num2);
}

public static int GetNewNum(ref int num)
{
    num = num + 10;
    return num;
}

其他场景

mysql 数据库编写存储过程的时候,参数一样有这种概念,一样分为 IN OUT IN/OUT

以上是关于参数的 in out in/out 修饰的主要内容,如果未能解决你的问题,请参考以下文章

oracle 存储过程参数介绍 in ,out , in out 以及 执行

oracle中in和out用法

创建存储过程 in,out,inout

Oracle中“IN”和“IN OUT”CURSOR参数的区别

MySQL 存储过程传参之in, out, inout 参数用法

如何解决 Kettle 中的这个 in/out mysql 参数错误?