澳门新葡亰娱乐网站-www.142net-欢迎您

澳门新葡亰娱乐网站是因为你还没有找到一条正确的致富之路,www.142net是将所有的游戏都汇集在一起的官方平台,因为澳门新葡亰娱乐网站这个网站当中有着大量的游戏攻略,托IP定位技术,传达终端直接到达的精准传播方式。

葡萄京娱乐网站:[C#基础]ref和out的区别

来源:http://www.bhtsgq.com 作者:计算机知识 人气:68 发布时间:2019-05-13
摘要:      在C#中通过利用格局来博取重返值时,日常只可以获取1个重回值。由此,当多个艺术需求重临多个值的时候,就要求用到ref和out,那么那八个点子分别在何地呢? C#基础:ref和

       在C#中通过利用格局来博取重返值时,日常只可以获取1个重回值。由此,当多个艺术需求重临多个值的时候,就要求用到ref和out,那么那八个点子分别在何地呢?

C#基础:ref和out的区别

ref和out的分别在C# 中,既能够因而值也能够由此引用传递参数。通过引用传递参数允许函数成员变动参数的值,并保证该退换。若要通过引用传递参数, 可选取ref或out关键字。ref和out那四个基本点字都能够提供相似的功用,其功用也很像C中的指针变量。它们的区分是:

一、使用ref型参数时,传入的参数必须先被伊始化。对out来讲,必须在章程中对其成功早先化。

贰、使用ref和out时,在点子的参数和实践办法时,都要加Ref或Out关键字。以满意相配。

三、out适合用在急需retrun七个再次回到值的地点,而ref则用在供给被调用的方法修改调用者的引用的时候。

注:在C#中,方法的参数字传送递有各体系型:传值(by value),传址(by reference),输出参数(by output),数组参数(by array)。传值参数无需额外的修饰符,传址参数供给修饰符ref,输出参数须要修饰符out,数组参数必要修饰符params。传值参数在点子调用进度中假如更改了参数的值,那么传入方法的参数在章程调用完结今后并不因而而改造,而是保存原来传入时的值。传址参数恰恰相反,假设方式调用进程改动了参数的值,那么传入方法的参数在调用完结之后也随即更动。实际上从名称上大家能够领略地看到两岸的意义--传值参数字传送递的是调用参数的1份拷贝,而传址参数字传送递的是调用参数的内部存款和储蓄器地址,该参数在形式内外指向的是同二个存款和储蓄地点。

方法参数上的 ref 方法参数关键字使艺术引用传递到方法的同2个变量。当调整传递回调用艺术时,在格局中对参数所做的其余变动都将映今后该变量中。

若要使用 ref 参数,必须将参数作为 ref 参数字展现式传递到格局。ref 参数的值被传送到 ref 参数。

传送到 ref 参数的参数必须首先开始化。将此方法与 out 参数对比,后者的参数在传递到 out 参数此前不要显式初叶化。

品质不是变量,不能够当做 ref 参数字传送递。

若果二种格局的宣示仅在它们对 ref 的使用方面不如,则将现出重载。可是,不能定义仅在 ref 和 out 方面不如的重载。

out

艺术参数上的 out 方法参数关键字使艺术引用传递到方式的同二个变量。当调整传递回调用艺术时,在章程中对参数所做的别的改动都将反映在该变量中。

当希望方法返回四个值时,申明 out 方法丰硕有效。使用 out 参数的办法仍旧能够重回二个值。3个措施能够有贰个以上的 out 参数。

若要使用 out 参数,必须将参数作为 out 参数字呈现式传递到艺术。out 参数的值不会传递到 out 参数。

没有须求初阶化作为 out 参数字传送递的变量。然则,必须在格局再次回到从前为 out 参数赋值。

性子不是变量,不可能看做 out 参数传递。

网络有多数篇章说ref 只传值,out传地址等等这种说法,好像不是非常的标准。以下是本身做的实例代码,我们能够去研究:

 public int  RefValue(int i,ref int j)
        {
            int k = j;
            j =222;
            return i k;
        }

     
        public int OutValue(int i, out int j)
        {
            j = 222;
            return i j;
        }

        private void cmdRef_Click(object sender, EventArgs e)
        {
            int m = 0;
            MessageBox.Show(RefValue(1, ref m).ToString());
            MessageBox.Show(m.ToString());
        }

        private void cmdOut_Click(object sender, EventArgs e)
        {
            int m;
葡萄京娱乐网站:[C#基础]ref和out的区别。            MessageBox.Show(OutValue(1, out m).ToString());
            MessageBox.Show(m.ToString());
        }
借网络海市中华全国总工会结的一句话说,ref是有进有出,而out是只出不进。

[C#基础]ref和out的区别,

       在C#中通过运用方法来获得再次来到值时,经常只好获得叁个重返值。由此,当三个主意须要再次来到三个值的时候,就要求用到ref和out,那么这个艺术分别在何地呢?

MSDN:
       ref 关键字使参数按引用传递。其效果是,当调整权传递回调用艺术时,在艺术中对参数所做的任何退换都将映未来该变量中。若要使用 ref 参数,则方法定义和调用方法都无法不显式使用 ref 关键字。
      out 关键字会导致参数通过引用来传递。那与 ref 关键字类似,区别之处在于 ref 须求变量必须在传递在此之前举行初阶化。若要使用 out 参数,方法定义和调用方法都必须显式使用 out 关键字。 

案例:

      定义二个措施,求四个平头数组中的最大值,最小值,和,平平均数量。假诺是三个艺术只可以有1个重临值,那只好每2个都得定义二个方法来贯彻,不过有了ref和out那贯彻起来就便于多了。

ref:

 1    static int GetIntResult(int[] arry, ref float avg, ref int max, ref int min)
 2         {
 3             int sum = 0;
 4             max = arry[0];
 5             min = arry[0];
 6             for (int i = 0; i < arry.Length; i  )
 7             {
 8                 sum  = arry[i];
 9                
10                 if (max < arry[i])
11                 {
12                     max = arry[i];
13                 }
14                 if (min > arry[i])
15                 {
16                     min = arry[i];
17                 }
18             }
19             avg = sum / arry.Length;
20             return sum;
21         }

 

      然后在调控高雄间试验着调用该方式:

1      static void Main(string[] args)
2         {
3             int[] arr = { 1,2,3,4,5,6,7,8,9};
4             float avg;
5             int max;
6             int min;
7             int sum = GetIntResult(arr, ref avg, ref max, ref min);
8         }

葡萄京娱乐网站 1

      此时编写翻译器就能够提示画红线,错误:使用了未赋值的avg,max,min

 1       static void Main(string[] args)
 2         {
 3             int[] arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
 4             float avg = 0;
 5             int max = 0;
 6             int min = 0;
 7             int sum = GetIntResult(arr, ref avg, ref max, ref min);
 8             Console.WriteLine("和:{0}t平均值:{1}t最大值:{2}t最小值:{3}", sum, avg, max, min);
 9             Console.Read();
10         }

运作结果:
葡萄京娱乐网站 2

总结:

      ref这几个入眼字告诉c#编写翻译器被传送的参数值指向与调用代码中变量同样的内存。这样,如果被调用的方法修改了那个值然后重临的话,调用代码的变量也就被改变了。

      ref 关键字使参数按引用传递。其职能是,当调控权传递回调用艺术时,在艺术中对参数所做的其他改动都将反映在该变量中(avg,max,min的发轫值为0,调用方法后值改动)。若要使用 ref 参数,则方法定义和调用方法都不能够不显式使用 ref 关键字。

out:

      换来out之后,下面的措施不再适用,报错,错误 : 调整离开当前艺术此前必须对 out 参数“min”和"max"赋值。你会开掘这里max和min在循环外并未有开头化。所以才会出错。

修改后代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Wolfy.RefAndOut
{
class Program
{
static void Main(string[] args)
{
int[] arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
float avg;//在动用out关键字时,无需在此地初步化,早先化也不会潜移默化到方法内部的值,所以你开头化没用
int max;
int min;
int sum = GetIntResult(arr, out avg, out max, out min);
Console.WriteLine("和:{0}t平均值:{1}t最大值:{2}t最小值:{3}", sum, avg, max, min);
Console.Read();
}
static int GetIntResult(int[] arry, out float avg, out int max, out int min)
{
int sum = 0;
max = arry[0];
min = arry[0];//使用out关键字时,必须在离开药方法前对out关键字修饰的参数初叶化
for (int i = 0; i < arry.Length; i )
{
sum = arry[i];

if (max < arry[i])
{
max = arry[i];
}
if (min > arry[i])
{
min = arry[i];
}
}
avg = sum / arry.Length;
新葡京8522网址 ,return sum;
}
}
}

葡萄京娱乐网站 3

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace Wolfy.RefAndOut
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13             int[] arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
14             float avg;//在使用out关键字时,不需要在此处初始化,初始化也不会影响到方法内部的值,所以你初始化没用
15             int max;
16             int min;
17             int sum = GetIntResult(arr, out avg, out max, out min);
18             Console.WriteLine("和:{0}t平均值:{1}t最大值:{2}t最小值:{3}", sum, avg, max, min);
19             Console.Read();
20         }
21         static int GetIntResult(int[] arry, out float avg, out int max, out int min)
22         {
23             int sum = 0;
24             max = arry[0];
25             min = arry[0];//使用out关键字时,必须在离开方法前对out关键字修饰的参数初始化
26             for (int i = 0; i < arry.Length; i  )
27             {
28                 sum  = arry[i];
29                
30                 if (max < arry[i])
31                 {
32                     max = arry[i];
33                 }
34                 if (min > arry[i])
35                 {
36                     min = arry[i];
37                 }
38             }
39             avg = sum / arry.Length;
40             return sum;
41         }
42     }
43 }

葡萄京娱乐网站 4

     结果和地点一样。

总结:
       out 关键字会导致参数通过引用来传递。那与 ref 关键字类似,不一致之处在于 ref 要求变量必须在传递此前开始展览开首化。若要使用 out 参数,方法定义和调用方法都必须显式使用 out 关键字。

结论:

       关键字“ref“和”out”之间的头一无二分裂就是根本字”out“不需要调用代码起先化要传送的参数值。那么重大字‘ref”哪天用吗?当你需求保障调用方法已经初阶化参数值的时候,您就应有利用首要字“ref”。在下边例子中,能够运用“out“是因为被调用的法子并不借助于于被传送的变量的值。个中滋味慢慢体会......

后话:

      在1论坛里面,有的时候看到有这么的帖子,就顺便总括了刹那间,也究竟记忆一下c#基础知识吧。

     想深远理解的能够看那篇小说:

  • 博客地址: 
    博客版权:如若文中有不妥也许不当的地方还望高手的你建议,以防误人子弟。要是以为本文对您抱有援救不比【推荐】一下!假设你有更加好的提出,比不上留言一起座谈,共同提高! 再一次多谢您耐心的读完本篇小说。

在C#中通过动用办法来获得再次来到值时,平时只可以获取一个再次回到值。因而,当一个方法须求再次来到八个值的时候,就要求...

ref和out的界别在C# 中,既能够通过值也足以经过引用传递参数。通过引用传递参数允许函数成员变动参数的值,并维持该更换。若要通过引用传递参数, 可使用ref或out关键字。ref和out那五个关键字都能够提供相似的功效,其遵从也很像C中的指针变量。它们的分别是:

MSDN:
       ref 关键字使参数按引用传递。其功用是,当控制权传递回调用艺术时,在点子中对参数所做的别样改造都将展现在该变量中。若要使用 ref 参数,则方法定义和调用方法都无法不显式使用 ref 关键字。
      out 关键字会导致参数通过引用来传递。那与 ref 关键字类似,分化之处在于 ref 供给变量必须在传递在此之前举办早先化。若要使用 out 参数,方法定义和调用方法都不能不显式使用 out 关键字。 

1、使用ref型参数时,传入的参数必须先被初阶化。对out来说,必须在点子中对其完毕初步化。

案例:

二、使用ref和out时,在方式的参数和实践措施时,都要加Ref或Out关键字。以满足相配。

      定义2个艺术,求八个整数数组中的最大值,最小值,和,平平均数量。借使是多个方式只可以有2个重返值,那只可以每1个都得定义三个办法来落实,然则有了ref和out那贯彻起来就有利于多了。

3、out适合用在需求retrun四个重返值的地方,而ref则用在急需被调用的艺术修改调用者的引用的时候。

ref:

注:在C#中,方法的参数字传送递有多种档期的顺序:传值(by value),传址(by reference),输出参数(by output),数组参数(by array)。传值参数无需附加的修饰符,传址参数要求修饰符ref,输出参数须要修饰符out,数组参数供给修饰符params。传值参数在艺术调用进程中壹经济体退换了参数的值,那么传入方法的参数在格局调用达成之后并不因而而退换,而是保存原来传入时的值。传址参数恰恰相反,假若措施调用进度更换了参数的值,那么传入方法的参数在调用完毕以往也随着转移。实际上从名称上大家得以知晓地看看两岸的意思--传值参数字传送递的是调用参数的一份拷贝,而传址参数字传送递的是调用参数的内部存款和储蓄器地址,该参数在措施内外指向的是同贰个仓库储存地点。

 1    static int GetIntResult(int[] arry, ref float avg, ref int max, ref int min)
 2         {
 3             int sum = 0;
 4             max = arry[0];
 5             min = arry[0];
 6             for (int i = 0; i < arry.Length; i  )
 7             {
 8                 sum  = arry[i];
 9                
10                 if (max < arry[i])
11                 {
12                     max = arry[i];
13                 }
14                 if (min > arry[i])
15                 {
16                     min = arry[i];
17                 }
18             }
19             avg = sum / arry.Length;
20             return sum;
21         }

主意参数上的 ref 方法参数关键字使艺术引用传递到方式的同多个变量。当调控传递回调用艺术时,在措施中对参数所做的任何更换都将反映在该变量中。

 

若要使用 ref 参数,必须将参数作为 ref 参数字展现式传递到艺术。ref 参数的值被传送到 ref 参数。

      然后在调节台南间试验着调用该措施:

传送到 ref 参数的参数必须首先开头化。将此措施与 out 参数相比较,后者的参数在传递到 out 参数在此之前不要显式开首化。

1      static void Main(string[] args)
2         {
3             int[] arr = { 1,2,3,4,5,6,7,8,9};
4             float avg;
5             int max;
6             int min;
7             int sum = GetIntResult(arr, ref avg, ref max, ref min);
8         }

脾气不是变量,不能够看做 ref 参数字传送递。

本文由澳门新葡亰发布于计算机知识,转载请注明出处:葡萄京娱乐网站:[C#基础]ref和out的区别

关键词: xpj登录平台 .NET开发

上一篇:sql语句语法,sql语句大全

下一篇:没有了

最火资讯