【美高梅开户网址】params与值类型参数修饰符

大家只怕在编码中或多或少的采纳过out的ref,不过是还是不是注意过她两的详尽用法以及界别?

美高梅开户网址,1.值类型:

1.值类型:

C# ref、out、params与值类型参数修饰符,

1.值类型:

美高梅开户网址 1

 1 static void Main(string[] args)
 2         {
 3             int a = 5;
 4             int b = 3;
 5             NumVal(a, b);
 6             Console.WriteLine("a={0},b={1}", a, b);     //输出结果为:a=5,b=3
 7 
 8             Console.ReadKey();
 9         }
10 
11 
12         static void NumVal(int a, int b)
13         {
14             a = a + b;
15             b = a - b;
16         }

代码

值类型被看成参数时,传递的是值的副本,所以在上边包车型地铁章程中期维修改参数的值并不能够影响函数调用中钦赐的参数的值。

当然也能够为函数定义再次回到值从而获取一些想要的结果:

美高梅开户网址 2

 1 static void Main(string[] args)
 2         {
 3             int a = 5;
 4             int b = 3;
 5             int num1 = NumVal(a, b);
 6             int num2 = NumValC(a, b);
 7             Console.WriteLine("a={0},b={1}", num1, num2);     //输出结果为:a=8,b=2
 8 
 9             Console.ReadKey();
10         }
11 
12         static int NumVal(int a, int b)
13         {
14             a = a + b;
15             return a;
16         }
17 
18         static int NumValC(int a, int b)
19         {
20             b = a - b;
21             return b;
22         }

代码

唯独这么做不佳的地点正是不能够更改当做参数的三个变量值。(因为函数只有二个再次来到值)。

2.引用类型(ref):

美高梅开户网址 3

 1 static void Main(string[] args)
 2         {
 3             int a = 5;
 4             int b = 3;
 5             NumVal(ref a, ref b);
 6             Console.WriteLine("a={0},b={1}", a, b);     //输出结果为:a=8,b=2
 7 
 8             Console.ReadKey();
 9         }
10 
11         static void NumVal(ref int a, ref int b)
12         {
13             int c = a;      // c=5
14             a = a + b;      // a=5+3
15             b = c - b;      // b=5-3
16         }

代码

那时能够通过“引用”参数修饰符(即重点字
ref)传递参数,那样函数处理与函数调用中动用的变量正是同四个(因为引用类型参数传递的是援引的地方),所以在方式中对那么些变量进行别的修改都会潜移默化用作参数的变量的值。

但经过 ref
修饰符修饰的变量在作为函数的参数字传送递时必须先开始化,无法在函数中展开初叶化操作。

3.出口类型(out):

美高梅开户网址 4

 1 static void Main(string[] args)
 2         {
 3             int a;
 4             int b;
 5             NumVal(out a, out b);
 6             Console.WriteLine("a={0},b={1}", a, b);     //输出结果为:a=15,b=4
 7 
 8             Console.ReadKey();
 9         }
10 
11         static void NumVal(out int a, out int b)
12         {
13             a = 5;b = 3;        // 初始化输出参数
14 
15             int c = a;
16             a = a * b;
17             b = (c + b) / 2;
18         }

代码

out 关键字的施用办法和 ref 关键字类似,使参数按引用传递值。

区别之处:ref 参数在作为参数字传送递时必须先初步化。out
参数则不必要在传递从前初叶化(尽管在传递从前已经初步化,在函数里面也需求再度初阶化,忽略传递在此之前开首化的值),但必须在章程截止再次回到在此以前赋值。

【美高梅开户网址】params与值类型参数修饰符。4.参数数组(params):

美高梅开户网址 5

 1 static void Main(string[] args)
 2         {
 3             int i = 0;
 4             int[] arr = new int[] { 1, 3, 5, 7, 9 };            //可以先定义一个数组对象
 5 
 6             SumVals(ref i, arr);                //然后把这个数组对象作为参数传递
 7 
 8             Console.WriteLine("总共有{0}个元素!", i);         //输出结果为:总共有5个元素!
 9 
10             SumVals(ref i, 2, 4, 6, 8, 0);      //也可以直接调用
11 
12             Console.ReadKey();
13         }
14 
15         static void SumVals(ref int i,params int[] vals)
16         {
17             for (i = 0; i < vals.Length; i++)
18             {
19                 Console.WriteLine("第{0}个元素为:{1}", i + 1, vals[i]);
20             }
21         }

代码

C#中等高校函授数能够钦赐一个特定的参数(即 params
修饰的参数数组,只可以有3个),且这几个参数必须是函数定义中的最终三个参数(即
params 关键字背后区别意出现任何其余参数)。

params
修饰的参数数组不钦定参数的数额,唯一的界定正是有所的参数类型必须和参数数组是同类型。

ref、out、params与值类型参数修饰符,
1.值品类: 1 static void Main( string [] args) 2 { 3 int a = 5 ; 4 int
b = 3 ; 5 NumVal(a, b); 6 Console.WriteLine( ” a={0},…

正文想介绍下详细介绍下out参数,ref参数以及一般值参数。

美高梅开户网址 6美高梅开户网址 7

美高梅开户网址 8美高梅开户网址 9

值参数

在应用参数时,把一个值传递给函数使用的一个变量。在函数中对此变量的别的修改都不影响函数调用中钦命的参数。如上面包车型大巴函数,是使函数是使传递过来的参数值加倍,并展示出来:

 static void ShowDouble(int num)
        {
            num = num * 2;
            Console.WriteLine("num*2={0}", num);
        }

参数num在函数中被加倍,要是按以下措施调用它:

            int num = 5;
            Console.WriteLine("num={0}", num);
            ShowDouble(num);
            Console.WriteLine("num={0}", num);

输出到控制台的文件如下所示:

美高梅开户网址 10

把num作为参数,调用ShowDouble()并不影响Mian()中num的值,就算把num值加倍之后再赋值给num,在函数调用完事后num的值仍然不会变。

那也没怎么难点。

不过一旦我们想改变num的值吗?我们会想到利用为num再次回到新值的函数:

 static int DoubleNum(int num)
        {
            num = num * 2;
            return num;
        }

然后调用:

            int num = 5;
            Console.WriteLine("num={0}", num);
            num = DoubleNum(num);
            Console.WriteLine("num={0}", num);

那段代码不是很直观,且不可能改变当做参数的多个变量值(因为函数只有三个重返值)。那么些时候大家能够想到引用参数,即函数处理的变量和函数调用的变量相同,而不仅是值相同的变量。因而对那一个变量的别样变更都会潜移默化用作参数的变量值。为此,我们运用ref关键词钦定参数。

 1 static void Main(string[] args)
 2         {
 3             int a = 5;
 4             int b = 3;
 5             NumVal(a, b);
 6             Console.WriteLine("a={0},b={1}", a, b);     //输出结果为:a=5,b=3
 7 
 8             Console.ReadKey();
 9         }
10 
11 
12         static void NumVal(int a, int b)
13         {
14             a = a + b;
15             b = a - b;
16         }
 1 static void Main(string[] args)
 2         {
 3             int a = 5;
 4             int b = 3;
 5             NumVal(a, b);
 6             Console.WriteLine("a={0},b={1}", a, b);     //输出结果为:a=5,b=3
 7 
 8             Console.ReadKey();
 9         }
10 
11 
12         static void NumVal(int a, int b)
13         {
14             a = a + b;
15             b = a - b;
16         }

ref参数

            int num = 5;
            Console.WriteLine("num={0}", num);
            ShowDouble(ref num);
            Console.WriteLine("num={0}", num);

运作控制台结果如下:

美高梅开户网址 11

用作ref的参数的变量有七个限制:

1.函数只怕会转移引用参数的值,所以必须在函数调用中央银行使“分外量”变量,所以上边包车型大巴代码是不被允许的:

 

            const int num = 5;
            Console.WriteLine("num={0}", num);
            ShowDouble(ref num);
            Console.WriteLine("num={0}", num);

2.不能够不运用开始化过的变量。C#不容许假定ref参数在函数调用时开端化,下边包车型大巴代码也是不被允许的:

            int num;
            Console.WriteLine("num={0}", num);
            ShowDouble(ref num);
            Console.WriteLine("num={0}", num);

代码

代码

出口参数(out)

除外ref外,还足以钦赐out关键字,钦点所给的参数时一个输出参数,out参数和ref参数都在函数定义和函数调用中作为参数的修饰符。事实上,它的进行措施与ref参数大致全盘等同,因为在函数执行达成后,该参数的值将赶回给函数调用中利用的变量。可是,二者存在有的第②不一致:

1.把未赋值的变量用作ref参数是违法的,不过未赋值的变量能够用作out参数

2.在函数中央银行使out参数时,必须将其看做尚未赋值。也便是说调用代码能够把已赋值的变量用作out参数,但在函数执行时该变量的值会丢失。

如以往有贰个赶回数组中最大值得马克斯()函数,获取数组中最大值得成分索引(那里借使如若有五个最大值,只回去第一个最大值索引),添加out参数:

  static int Max(int[] intArray,out int maxIndex)
        {
            int maxVal = intArray[0];
            maxIndex = 0;
            for (int i = 1; i < intArray.Length; i++)
            {
                if(intArray[i]>maxVal)
                {
                    maxVal = intArray[i];
                    maxIndex = i;
                }
            }
            return maxVal;
        }

调用上面包车型大巴代码:

 int[] myArray = { 1, 8, 3, 6, 2, 5, 9, 3, 0, 2 };
 int maxIndex;
 Console.WriteLine("the maxium value is {0}", Max(myArray, out maxIndex));
 Console.WriteLine("the index of the maxium value is{0}", maxIndex + 1);

支配台出口的结果如下所示:

美高梅开户网址 12

 

值类型被当作参数时,传递的是值的副本,所以在下边包车型客车措施中期维修改参数的值并不能够影响函数调用中钦命的参数的值。

值类型被看成参数时,传递的是值的副本,所以在底下的措施中期维修改参数的值并无法影响函数调用中钦定的参数的值。

理所当然也足以为函数定义再次来到值从而取得部分想要的结果:

当然也能够为函数定义再次回到值从而获取一些想要的结果:

美高梅开户网址 13美高梅开户网址 14

美高梅开户网址 15美高梅开户网址 16

 1 static void Main(string[] args)
 2         {
 3             int a = 5;
 4             int b = 3;
 5             int num1 = NumVal(a, b);
 6             int num2 = NumValC(a, b);
 7             Console.WriteLine("a={0},b={1}", num1, num2);     //输出结果为:a=8,b=2
 8 
 9             Console.ReadKey();
10         }
11 
12         static int NumVal(int a, int b)
13         {
14             a = a + b;
15             return a;
16         }
17 
18         static int NumValC(int a, int b)
19         {
20             b = a - b;
21             return b;
22         }
 1 static void Main(string[] args)
 2         {
 3             int a = 5;
 4             int b = 3;
 5             int num1 = NumVal(a, b);
 6             int num2 = NumValC(a, b);
 7             Console.WriteLine("a={0},b={1}", num1, num2);     //输出结果为:a=8,b=2
 8 
 9             Console.ReadKey();
10         }
11 
12         static int NumVal(int a, int b)
13         {
14             a = a + b;
15             return a;
16         }
17 
18         static int NumValC(int a, int b)
19         {
20             b = a - b;
21             return b;
22         }

代码

代码

然则这么做不佳的地点就是不可能更改当做参数的多个变量值。(因为函数只有1个重临值)。

但是如此做不佳的地点就是无法改变当做参数的五个变量值。(因为函数只有二个重临值)。

2.引用类型(ref):

2.引用类型(ref):

美高梅开户网址 17美高梅开户网址 18

美高梅开户网址 19美高梅开户网址 20

 1 static void Main(string[] args)
 2         {
 3             int a = 5;
 4             int b = 3;
 5             NumVal(ref a, ref b);
 6             Console.WriteLine("a={0},b={1}", a, b);     //输出结果为:a=8,b=2
 7 
 8             Console.ReadKey();
 9         }
10 
11         static void NumVal(ref int a, ref int b)
12         {
13             int c = a;      // c=5
14             a = a + b;      // a=5+3
15             b = c - b;      // b=5-3
16         }
 1 static void Main(string[] args)
 2         {
 3             int a = 5;
 4             int b = 3;
 5             NumVal(ref a, ref b);
 6             Console.WriteLine("a={0},b={1}", a, b);     //输出结果为:a=8,b=2
 7 
 8             Console.ReadKey();
 9         }
10 
11         static void NumVal(ref int a, ref int b)
12         {
13             int c = a;      // c=5
14             a = a + b;      // a=5+3
15             b = c - b;      // b=5-3
16         }

代码

代码

这时能够通过“引用”参数修饰符(即重点字
ref)传递参数,那样函数处理与函数调用中利用的变量就是同2个(因为引用类型参数字传送递的是援引的地方),所以在措施中对那些变量举办任何改动都会潜移默化用作参数的变量的值。

那时得以经过“引用”参数修饰符(即重点字
ref)传递参数,那样函数处理与函数调用中采纳的变量正是同一个(因为引用类型参数字传送递的是引用的地址),所以在点子中对那个变量举行任何改动都会影响用作参数的变量的值。

但由此 ref
修饰符修饰的变量在作为函数的参数字传送递时务必先初叶化,不可能在函数中开始展览开始化操作。

但经过 ref
修饰符修饰的变量在作为函数的参数字传送递时必须先伊始化,不能够在函数中开始展览初步化操作。

3.输出类型(out):

3.输出类型(out):

美高梅开户网址 21美高梅开户网址 22

美高梅开户网址 23美高梅开户网址 24

 1 static void Main(string[] args)
 2         {
 3             int a;
 4             int b;
 5             NumVal(out a, out b);
 6             Console.WriteLine("a={0},b={1}", a, b);     //输出结果为:a=15,b=4
 7 
 8             Console.ReadKey();
 9         }
10 
11         static void NumVal(out int a, out int b)
12         {
13             a = 5;b = 3;        // 初始化输出参数
14 
15             int c = a;
16             a = a * b;
17             b = (c + b) / 2;
18         }
 1 static void Main(string[] args)
 2         {
 3             int a;
 4             int b;
 5             NumVal(out a, out b);
 6             Console.WriteLine("a={0},b={1}", a, b);     //输出结果为:a=15,b=4
 7 
 8             Console.ReadKey();
 9         }
10 
11         static void NumVal(out int a, out int b)
12         {
13             a = 5;b = 3;        // 初始化输出参数
14 
15             int c = a;
16             a = a * b;
17             b = (c + b) / 2;
18         }

代码

代码

out 关键字的选用方法和 ref 关键字类似,使参数按引用传递值。

out 关键字的施用方式和 ref 关键字类似,使参数按引用传递值。

分歧之处:ref 参数在作为参数字传送递时必须先起头化。out
参数则不须要在传递在此之前早先化(固然在传递在此之前曾经开端化,在函数里面也亟需重新初阶化,忽略传递从前起首化的值),但不可能不在措施甘休重返此前赋值。

差别之处:ref 参数在作为参数字传送递时必须先初叶化。out
参数则不须求在传递以前起首化(即使在传递以前早已开头化,在函数里面也须要再度初步化,忽略传递从前伊始化的值),但必须在措施甘休再次来到此前赋值。

4.参数数组(params):

4.参数数组(params):

美高梅开户网址 25美高梅开户网址 26

美高梅开户网址 27美高梅开户网址 28

 1 static void Main(string[] args)
 2         {
 3             int i = 0;
 4             int[] arr = new int[] { 1, 3, 5, 7, 9 };            //可以先定义一个数组对象
 5 
 6             SumVals(ref i, arr);                //然后把这个数组对象作为参数传递
 7 
 8             Console.WriteLine("总共有{0}个元素!", i);         //输出结果为:总共有5个元素!
 9 
10             SumVals(ref i, 2, 4, 6, 8, 0);      //也可以直接调用
11 
12             Console.ReadKey();
13         }
14 
15         static void SumVals(ref int i,params int[] vals)
16         {
17             for (i = 0; i < vals.Length; i++)
18             {
19                 Console.WriteLine("第{0}个元素为:{1}", i + 1, vals[i]);
20             }
21         }
 1 static void Main(string[] args)
 2         {
 3             int i = 0;
 4             int[] arr = new int[] { 1, 3, 5, 7, 9 };            //可以先定义一个数组对象
 5 
 6             SumVals(ref i, arr);                //然后把这个数组对象作为参数传递
 7 
 8             Console.WriteLine("总共有{0}个元素!", i);         //输出结果为:总共有5个元素!
 9 
10             SumVals(ref i, 2, 4, 6, 8, 0);      //也可以直接调用
11 
12             Console.ReadKey();
13         }
14 
15         static void SumVals(ref int i,params int[] vals)
16         {
17             for (i = 0; i < vals.Length; i++)
18             {
19                 Console.WriteLine("第{0}个元素为:{1}", i + 1, vals[i]);
20             }
21         }

代码

代码

C#中等高校函授数能够钦定一个特定的参数(即 params
修饰的参数数组,只好有叁个),且那么些参数必须是函数定义中的最终三个参数(即
params 关键字背后不允许出现别的其余参数)。

C#中等高校函授数能够钦定贰个一定的参数(即 params
修饰的参数数组,只能有3个),且那个参数必须是函数定义中的最终3个参数(即
params 关键字背后不容许出现其余别的参数)。

params
修饰的参数数组不钦定参数的数据,唯一的限定就是持有的参数类型必须和参数数组是同类型。

params
修饰的参数数组不点名参数的多寡,唯一的范围便是装有的参数类型必须和参数数组是同类型。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图