方法的参数传递

方法的参数传递

主要内容参考菜鸟教程,这个讲的挺简单的

当调用带有参数的方法时,您需要向方法传递参数。在 C# 中,有三种向方法传递参数的方式:

方式 描述
值参数 这种方式复制参数的实际值给函数的形式参数,实参和形参使用的是两个不同内存中的值。在这种情况下,当形参的值发生改变时,不会影响实参的值,从而保证了实参数据的安全。
引用参数 这种方式复制参数的内存位置的引用给形式参数。这意味着,当形参的值发生改变时,同时也改变实参的值。
输出参数 这种方式可以返回多个值。

按值传递  参数

这是参数传递的默认方式。在这种方式下,当调用一个方法时,会为每个值参数创建一个新的存储位置。

实际参数的值会复制给形参,实参和形参使用的是两个不同内存中的值。所以,当形参的值发生改变时,不会影响实参的值,从而保证了实参数据的安全。下面的实例演示了这个概念:

using System;

namespace ConsoleApp7
{ 
    class Program
    {
        public void swip(int a, int b)
        {
            int temp;
            temp = a;
            a = b;
            b = temp;
        }
        static void Main(string[] args)
        {
            int a = 90;
            int b = 624;
            Console.WriteLine("未交换前的两个值为: {0} {1}", a, b);

            Program s = new Program();
            s.swip( a, b);
            Console.WriteLine("交换后的两个值a为 : {0}", a);
            Console.WriteLine("交换后的两个值b为 : {0}", b);
            Console.ReadKey();
        }
    }
}

 

当上面的代码被编译和执行时,它会产生下列结果:

在交换之前,a 的值:100
在交换之前,b 的值:200
在交换之后,a 的值:100
在交换之后,b 的值:200

结果表明,即使在函数内改变了值,值也没有发生任何的变化。

 

按引用传递  参数

引用参数是一个对变量的内存位置的引用。当按引用传递参数时,与值参数不同的是,它不会为这些参数创建一个新的存储位置。引用参数表示与提供给方法的实际参数具有相同的内存位置。

在 C# 中,使用 ref 关键字声明引用参数。下面的实例演示了这点:

using System;

namespace ConsoleApp7
{ 
    class Program
    {
        public void swip(ref int a,ref int b)
        {
            int temp;
            temp = a;
            a = b;
            b = temp;
        }
        static void Main(string[] args)
        {
            int a = 90;
            int b = 624;
            Console.WriteLine("未交换前的两个值为: {0} {1}", a, b);

            Program s = new Program();
            s.swip(ref a, ref b);
            Console.WriteLine("交换后的两个值a为 : {0}", a);
            Console.WriteLine("交换后的两个值b为 : {0}", b);
            Console.ReadKey();
        }
    }
}

当上面的代码被编译和执行时,它会产生下列结果:

在交换之前,a 的值:100
在交换之前,b 的值:200
在交换之后,a 的值:200
在交换之后,b 的值:100

结果表明,swap 函数内的值改变了,且这个改变可以在 Main 函数中反映出来。

按输出传递参数

return 语句可用于只从函数中返回一个值。但是,可以使用 输出参数 来从函数中返回两个值。输出参数会把方法输出的数据赋给自己,其他方面与引用参数相似。

下面的实例演示了这点:

using System;

namespace ConsoleApp7
{ 
    class Program
    {
        public void swip(out int a)
        {
            int temp = 2415;
            a = temp;
        }
        static void Main(string[] args)
        {
            int a = 90;
            Console.WriteLine("未交换前的两个值为: {0}", a);

            Program s = new Program();
            s.swip(out a);
            Console.WriteLine("交换后的两个值a为 : {0}", a);
            Console.ReadKey();
        }
    }
}

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/114861.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • nginx实现https网站设置(SSL证书生成配置)

    nginx实现https网站设置(SSL证书生成配置)

    2021年6月2日
    87
  • SQL中declare申明变量

    SQL中declare申明变量

    2021年12月6日
    45
  • kubernetes CKA题库(附答案)

    kubernetes CKA题库(附答案)第一题RBAC授权问题权重:4%设置配置环境:[student@node-1]$kubectlconfiguse-contextk8sContext为部署管道创建一个新的ClusterRole并将其绑定到范围为特定的namespace的特定ServiceAccount.Task创建一个名为deployment-clusterrole且仅允许创建以下资源类型的新ClusterRole:DeploymentStatefulSetDaemonSet在现有的name

    2022年6月9日
    142
  • mysql查询每个用户的第一条记录_mysql怎么创建用户

    mysql查询每个用户的第一条记录_mysql怎么创建用户数据库记录:MYSQL查询不同用户最新的一条记录方法1:查询出结果后将时间排序后取第一条(只能取到一条,并且不能查询不同客户的记录)SELECTCUSTOMER_ID,CONTENT,MODIFY_TIMEFROM`service_records`ORDERBYMODIFY_TIMEDESCLIMIT1;查询结果:方法2:查询排序后groupby(先按照MODIFY_TI…

    2022年9月7日
    0
  • 【Windows网络编程】完成端口IOCP介绍(超详细)

    【Windows网络编程】完成端口IOCP介绍(超详细)这篇文档我非常详细并且图文并茂的介绍了关于网络编程模型中完成端口的方方面面的信息,从API的用法到使用的步骤,从完成端口的实现机理到实际使用的注意事项,都有所涉及,并且为了让朋友们更直观的体会完成端口的用法,本文附带了有详尽注释的使用MFC编写的图形界面的示例代码。       我的初衷是希望写一份互联网上能找到的最详尽的关于完成端口的教学文档,而且让对Socket编程略有了解的人都能够

    2022年4月18日
    353
  • 怎样用python画爱心_女生节前夕特别篇:如何用python画爱心[通俗易懂]

    怎样用python画爱心_女生节前夕特别篇:如何用python画爱心[通俗易懂]亲爱的男生们:展信佳!明天就是女生节了,你们是否还在为送什么而焦头烂额,是否还在俗套地沿用着前辈们的套路。挂横幅——让女生们梦回八九十年代的大学生活?拍视频——加入抖音快手之流?送礼物——非常棒!!可惜没钱?如何能够送出实惠而又有逼格的礼物?今天,我就给大家隆重地介绍一个简单而又高大上的方法——用python来制作一个爱心!!你可能会问,太难了,我不会python怎么办?不要怕,超级简单的,相信我…

    2022年9月6日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号