C# 方法的out、ref、params参数

一、out参数实例

【实例】求一个数组中的最大值、最小值、总和、平均值

  class Program
    {
        static void Main(string[] args)
        {
            //写一个方法 求一个数组中的最大值、最小值、总和、平均值
            int[] nums = { 1, 2, 3, 4, 5, 6 ,7};
            int max;
            int sum;
            int min;
            int avg;
            bool b;
            string s;
            double d;
            GetValue(nums, out max, out min, out sum, out avg,out b,out s,out d);
            Console.WriteLine("数组中的最大值:{0},最小值:{1},总和:{2},平均值:{3}",max ,min,sum,avg);
            Console.WriteLine("输出out参数的方法不同类型的值:{0},{1},{2}",b,s,d);
            Console.ReadKey();
        }
        /// <summary>
        /// 求一个整数的数组的最大值,最小值,总和,平均值
        /// </summary>
        /// <param name="nums">要求值的数组</param>
        /// <param name="max">返回的最大值</param>
        /// <param name="min">返回的最小值</param>
        /// <param name="sum">返回的总和</param>
        /// <param name="avg">返回的平均值</param>
        public static void GetValue(int[] nums, out int max, out int min, out int sum, out int avg, out bool b,out string s,out double d)
        {
           //out参数要求在方法的内部必须为其赋值
            max = nums[0];
            min = nums[0];
            sum = 0;
            for (int i = 0; i < nums.Length; i++)
            {
                if (nums[i]>max)
                {
                    max = nums[i];
                }
                if (nums[i]<min)
                {
                    min = nums[i];
                }
                sum += nums[i];
            }
            avg = sum / nums.Length;

            b = true;
            s = "123";
            d = 3.13;
        }
    }

执行代码输出结果,如图所示:

总结:

如果一个方法中,返回多个相同类型的值时候,我们可以考虑返回一个数组。但是返回多个不同类型的值时候,返回数组就不行,那么这个时候,我们可以考虑用out参数。

out参数就侧重于一个方法可以返回多个不同类型的值。

二、ref参数的实例

【实例】使用方法来交换两个int类型的变量

 class Program
    {
        static void Main(string[] args)
        {
            //使用方法来交换两个int类型的变量
            int n1 = 10;
            int n2 = 20;
            Test(ref n1, ref n2);
            Console.WriteLine("两个值互相交换后n1为{0},n2为:{1}",n1,n2);
            Console.ReadKey();
        }
        public static void  Test(ref int n1,ref int n2)
        {
            int temp = n1;
            n1 = n2;
            n2 = temp;
        }
    }

执行代码输出结果,如图所示:

总结:

ref参数能够将一个变量带入一个方法中进行改变,改变完成后,再将改变后的值带出方法。

 ref参数要求在方法外必须要赋值,而方法内可以不赋值。

三、params可变参数

【实例】求任意长度数组的和 整数类型的

 class Program
    {
        static void Main(string[] args)
        {
            //求任意长度数组的和 整数类型的
            int[] nums = { 1, 2, 3, 4, 5, 6 };
            int sum = GetSum(8,9);
            Console.WriteLine(sum);
            Console.ReadKey();
        }
        public static int GetSum(params int[] nums)
        {
            int sum = 0;
            for (int i = 0; i < nums.Length; i++)
            {
                sum += nums[i];
            }
            return sum;
        }
    } 

执行代码输出结果,如图所示:

如图所示:

 总结:

将实参数列表中跟可变参数数组类型一致的元素都当做数组的元素去处理

params可变参数必须是形参列表中的最后一个元素,并且在方法声明中只允许一个params关键字。

四、out 与ref的区别

区别:

1.使用ref参数时,传入的参数必须被初始化,对out而言,必须在方法中对其完成初始化。

2.使用ref参数和out参数时,在方法的参数和执行方法时,都要加ref或者out关键字。

3.out参数适合用在需要return多个返回值的地方,而ref参数则用在需要被调用的方法修改调用者的引用的时候。

如图所示:

out参数

ref参数

ref关键字是需要先初始化传入的参数,才能够使用。

原文地址:https://www.cnblogs.com/qy1234/p/11826649.html

时间: 2024-07-30 21:58:05

C# 方法的out、ref、params参数的相关文章

params参数的调用

namespace params参数的用法 { class Program { public static void Test(string name,params int[] score) { int sum = 0; for (int i = 0; i < score.Length; i++) { sum += score[i]; } Console.WriteLine("{0}这次的总成绩为{1}",name,sum); } static void Main(string[

c#中的ref、out、params参数

out参数 与c++的引用的对比 out参数可以用来传递方法返回值,与c++中的引用有点像,但是还有有些不同: - 调用方法的时候必须写out参数 - 调用方法之前必须先分配空间 - 调用方法之前不用先赋值. - 必须在方法内部对out参数赋值; 下面自己实现一个tryparse函数 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threadin

out参数,ref参数,params参数数组

params参数数组 params关键字可以为方法指定数目可变的参数.params关键字修饰的参数,可以传入任意数目的同类型参数,甚至可以不传入参数. 不过params修饰的参数必须是方法的最后一个参数,并且一个方法只能有一个params修饰的参数. 示例 public class MyClass { public static void UseParams(params int[] list) { for (int i = 0; i < list.Length; i++) { Console.

C# 中out,ref,params参数的使用

C#中有三个高级参数,分别是out,ref,params: 1.out参数 方法使用return 只能返回一个值(一个数值或一个指针值),out参数可以帮助我们在一个方法中返回多个值,不限类型. 在使用out参数的时候需要注意: 在调用方法之前,对out参数传递的变量只需声明,可以赋值也可以不赋值,赋值也会在方法中被覆盖掉. 方法使用了out参数传递变量时,就是要返回值,所以必须在方法内为其赋值. 方法的参数使用out关键字修饰时,在调用该方法时,也要在out参数传递的变量前面加上out关键字才

C#方法参数传递-同时使用ref和out关键字

在方法参数传递中,可以同时使用ref和out关键字,但是要注意ref和out参数传递的不同. using System;class Program{static void Main(){    Program obj = new Program();    int score = 55; //声明原来分数    int refscore, outscore; //声明两个变量    obj.ChangeScore(score, ref refscore, out outscore);    Co

C#方法中的ref和out

ref        通常我们向方法中传递的是值.方法获得的是这些值的一个拷贝,然后使用这些拷贝,当方法运行完毕后,这些拷贝将被丢弃,而原来的值不将受到影响.此外我们还有其他向方法传递参数的形式,引用(ref)和输出(out).    有时,我们需要改变原来变量中的值,这时,我们可以向方法传递变量的引用,而不是变量的值.引用是一个变量,他可以访问原来变量的值,修改引用将修改原来变量的值.变量的值存储在内存中,可以创建一个引用,他指向变量在内存中的位置.当引用被修改时,修改的是内存中的值,因此变量

@RequestMapping的params参数 @RequestMapping(params = &quot;method=save&quot;)

@RequestMapping的params参数还是挺好用的. 我的需求是这样的,现在有两个列表页面,一个是全部用户的列表页面,一个是某一个用户的列表页面,但是他们的jsp页面是一样的,url路径我也想一样的,单一用户的列表页面我想通过传入用户名来区别. 但是springmvc不能多个方法匹配一个url. @RequestMapping的params参数就很好的就解决了这个问题. 同一个url,只要params不同,sringmvc是会区分匹配的. 示例我的项目中的一段代码: Java代码  

ngrep环回接口数据抓取方法,使用-d lo参数

ngrep环回接口数据抓取方法,使用-d lo参数,注意顺序: ngrep -W byline -d lo port 80

当写listview的onItemClick的方法时写Toast的参数context写成this出现can&#39;t resolve method ’make text(OnClickListener,java.lang.String,int)&#39;的错误,原因

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Fruit fruit = fruitList.get(position); //Toast.makeText(this,fruit.getName(),Toast.L

HTML扩展类的所有方法都有2个参数:

——摘自Rocky Ren 以textbox为例子 public static string TextBox( this HtmlHelper htmlHelper, string name, Object value, IDictionary<string, Object> htmlAttributes ) public static string TextBox( this HtmlHelper htmlHelper, string name, Object value, Object h