参数修饰符:

  1. 无参数修饰符:如果一个参数没有任何参数修饰符修饰,那么认为它是值传递,意味着方法内部收到的是实参数据的副本
  2. out:输出参数由方法内部进行赋值,(引用传递),如果方法内部没有给被out修饰的输出参数赋值,就会出现编译报错。out最大的用途就是只调用一次方法便会产生多个返回值。(C#7.0中实现一次方法返回多个返回值,可以使用元组)
  3. ref:调用者赋初始值,(引用传递),在方法内部可以对参数进行操作,也可以不对它进行操作,但前提是ref修饰的参数是有初始值的。

out 和 ref 区别:

  • out修饰的参数必须在方法内部进行操作,而ref随意
  • out传参时,如果参数时局部变量,可以不用对其赋值,因为在其方法内部一定存在赋值操作
  • ref修饰的变量,其实参必须有初始值,因为方法中不一定对其有赋值操作。

代码验证如下:

        static void Main(string[] args)
{
// 1.out 操作
string str_out;
doOut(out str_out);
Console.WriteLine($"执行doOut后的str值为:{str_out}");
Console.WriteLine("----------------");
// 2.ref操作
string str_ref = "ref修饰的参数一定要提前赋值,否则会报错";
doRef(ref str_ref);
Console.WriteLine("----------------");
// 3.无参数修饰符
string str = "无参数修饰符";
Console.WriteLine($"执行无参数修饰符操作之前:{str}");
doWrite(str);
Console.WriteLine($"执行无参数修饰符操作之后:{str}");
Console.WriteLine("----------------");
} /// <summary>
/// out操作
/// </summary>
/// <param name="s"></param>
public static void doOut(out string s)
{
// out 修饰的参数,在方法内部必须进行赋值相关的操作,否则会报错
s = "out修饰的参数需要在方法内部进行了操作,且原始数据也存在改动";
Console.WriteLine(s);
} /// <summary>
/// ref操作
/// </summary>
/// <param name="s"></param>
public static void doRef(ref string s)
{
// ref 修饰的参数,在方法内部可以不对它进行相关的操作,但参数一定要提前赋值
Console.WriteLine(s);
} /// <summary>
/// 无参数修饰符操作
/// </summary>
/// <param name="s"></param>
public static void doWrite(string s)
{
// 无参数修饰符,传入的实参相当于原始数据的一个副本,本质是值传递,并不会对实参本身的数据产生影响
s = "没有任何参数修饰符";
Console.WriteLine(s);
}

操作截图:

C#-out和ref 参数修饰符的更多相关文章

  1. out 和 ref 参数修饰符

    整理自MSDN out: out 关键字通过引用传递参数.这与 ref 关键字相似,只不过 ref 要求在传递之前初始化变量.若要使用 out 参数,方法定义和调用方法均必须显式使用 out 关键字. ...

  2. .net 参数修饰符

    参数修饰符的作用 参数修饰符 作用 无 如果一个参数没有用参数修饰符标记,则认为它将按值传递(pass by value),这意味着被调用的方法收到原始数据的一份副本 out 输出参数由被调用的方法赋 ...

  3. C#的参数修饰符out,params,ref

    using System; namespace ParamsProgram { class TestParams { public static void Main(string[] args)//s ...

  4. 参数修饰符ref,out ,params的区别

    参数修饰符ref,out ,params的区别 C#中有三个关键字-ref,out ,params,可是这三个之间的区别你都明白了吗? 那么我们就来认识一下参数修饰符ref,out ,params吧, ...

  5. C#中ref和out关键字的应用以及区别(参数修饰符)

    ref ref的定义 ref是reference的缩写,通过引用来传递参数的地址,ref基本上是服务于值类型的 ref的使用 //不使用 ref; void Method(int myRefInt) ...

  6. C#中方法的参数修饰符

    做项目久了,有的时候真的需要静下心来认真的总结一下自己所用到的技术,而不是每天依葫芦画瓢,每天忙忙碌碌,到头来不知道自己忙了个啥,学了什么,自己到底掌握了多少知识.所以我想回顾一下C#的基础知识,把重 ...

  7. Out,ref,params修饰符,可选参数,命名参数

    out输出,在调用函数中声明,在被调用函数中赋值: ref在调用函数中赋值,后调用: params修饰符,static double CalculateAverage(params[] values) ...

  8. c#.net中参数修饰符ref,out ,params解析

    params ============================================================================================= ...

  9. C#原始类型扩展方法—this参数修饰符

    扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型.扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用.对于用 C# 和 Visual ...

  10. c#参数修饰符-params

    先来理解一下理论知识 params可以设置使用长度可变的参数. 使用要求: 1.在一个方法声明的参数中,只能有一个params修饰符,且被修饰的参数之后不能有其他参数(这一点就像“可选参数必须在必选参 ...

随机推荐

  1. 轻松理解Promise.all 、Promise.then、Promise.race有什么区别以及使用方法

    简单来说呢,Promse.all一般应用于某个场景需要多个接口数据合并起来才能实现 有个极大地好处我必须说一下,请求顺序和获取数据顺序是一样的哟,大可放心使用~~ const success1 = n ...

  2. yarn使用 以及和npm对比

    yarn是facebook发布的一款取代npm的包管理工具. yarn的特点: 速度超快. Yarn 缓存了每个下载过的包,所以再次使用时无需重复下载. 同时利用并行下载以最大化资源利用率,因此安装速 ...

  3. 记一次线上FGC问题排查

    引言 本文记录一次线上 GC 问题的排查过程与思路,希望对各位读者有所帮助.过程中也走了一些弯路,现在有时间沉淀下来思考并总结出来分享给大家,希望对大家今后排查线上 GC 问题有帮助. 背景 服务新功 ...

  4. MySQL中多种排名实现

      一.数据库表结构以及数据 CREATE TABLE `forlan_score` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', ...

  5. 深度剖析 Linux 伙伴系统的设计与实现

    在上篇文章 <深入理解 Linux 物理内存分配全链路实现> 中,笔者为大家详细介绍了 Linux 内存分配在内核中的整个链路实现: 但是当内核执行到 get_page_from_free ...

  6. WSL 2 内配置Fcitx自启动

    前言 我通过配置成fcitx进行服务进行,但其权限是root,在普通模式下无法使用 我用的是xserver ( moba xterm),我要在gtk mode 下启动fcitx,其实 不用这么写 操作 ...

  7. 【CodeSmith】The System.Data.SQLite library is not installed on this computer,不能使用SQLite解决办法

    1.出现问题原因 1)System.Data.SQLite 尚未安装在您的计算机上 2)System.Data.SQLite 尚未正确配置 2.下载并安装System.Data.Sqlite [注意] ...

  8. 学习Java Day6

    今天学习了Java的输出,与C/C++不同,Java的输出形式有很多,有许多printf标识符表示的含义各不相同,而且数量众多,其中Java还有表示日期的转换符.

  9. 【KAWAKO】MNN-将推理程序交叉编译成RK1126的可执行文件

    目录 得到RK交叉编译器 将交叉编译器添加进path 对MNN进行交叉编译 对自己的工程进行交叉编译 将编译好的可执行文件和.so动态库放入板子中运行 得到RK交叉编译器 主要用到这两个,一个gcc的 ...

  10. CF796C Bank Hacking

    题目传送门 思路 放眼整个题解区没有我这种解法,因此来写一篇题解. 既然要求我们选择一个节点作为根,那么我们就枚举根. 接下来的问题就是如何 \(\mathcal{O}(1)\) 或 \(\mathc ...