ref和out的区别,值类型和引用类型的使用_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > ref和out的区别,值类型和引用类型的使用

ref和out的区别,值类型和引用类型的使用

 2014/4/5 19:12:26  农村小伙  博客园  我要评论(0)
  • 摘要:今天刚刚明白ref和out的区别,只限于个人理解如有不同请赐教,谢谢首先我感觉ref和out是针对于值类型来说,以前一直认为是针对于引用类型看下面的一段代码1.首先结果i=0;ints[0]=0i=0;ints[0]=1002.ints作为一个引用类型在传入方法后,对ints[0]进行了赋值,是将引用类型的地址引用到了100这个值得堆上,3.而值类型i引入到另外一个方法后进行赋值不会对原有字符串进行改变4.ref就是为了解决这个问题
  • 标签:使用 区别 值类型

今天刚刚明白ref和out的区别,只限于个人理解如有不同请赐教,谢谢

首先我感觉ref和out是针对于值类型来说,以前一直认为是针对于引用类型看下面的一段代码

1.首先结果 i=0;ints[0]=0    i=0;ints[0]=100

2.ints作为一个引用类型在传入方法后,对ints[0]进行了赋值,是将引用类型的地址引用到了100这个值得堆上,

3.而值类型i引入到另外一个方法后进行赋值不会对原有字符串进行改变

4.ref就是为了解决这个问题,让值类型能够和引用类型一样在传入方法后值会进行改变

class="code_img_closed" src="/Upload/Images/2014040519/0015B68B3C38AA5B.gif" alt="" />logs_code_hide('0274957d-2936-4459-ad0e-dc1558bf49ee',event)" src="/Upload/Images/2014040519/2B1B950FA3DF188F.gif" alt="" />
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Demo
{
    class Program
    {
        static void SomeFunction(int[] ints, int i)
        {
            ints[0] = 100;
            i = 100;
        }
        static void Main(string[] args)
        {
            int i = 0;
            int[] ints = { 0, 1, 2, 3, 4 };
            Console.WriteLine("i=" + i);
            Console.WriteLine("ints=" + ints[0]);
            SomeFunction(ints, i);
            Console.WriteLine("i=" + i);
            Console.WriteLine("ints=" + ints[0]);
            Console.ReadKey();
        }
    }
}
View Code

5.将代码添加上ref  结果:i=0;int[0]=0;i=100;ints[0]=100

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

namespace Demo
{
    class Program
    {
        static void SomeFunction(int[] ints, ref int i)
        {
            ints[0] = 100;
            i = 100;
        }
        static void Main(string[] args)
        {
            int i = 0;
            int[] ints = { 0, 1, 2, 3, 4 };
            Console.WriteLine("i=" + i);
            Console.WriteLine("ints=" + ints[0]);
            SomeFunction(ints, ref i);
            Console.WriteLine("i=" + i);
            Console.WriteLine("ints=" + ints[0]);
            Console.ReadKey();
        }
    }
}
View Code

所以我认为ref是对值类型的改变而且和out一样,在进行传递参数的时候对变量进行了初始化。

 

而out只是在传递参数的时候不用进行赋值,但是在调用的方法里面必须进行赋值,负责会报没被赋值的out参数

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

namespace Demo
{
    class Program
    {
        static void SomeFunction(int[] ints, out int i)
        {
            ints[0] = 100;
            i = 100;
        }
        static void Main(string[] args)
        {
            int i;
            int[] ints = { 0, 1, 2, 3, 4 };
           //Console.WriteLine("i=" + i);
            Console.WriteLine("ints=" + ints[0]);
            SomeFunction(ints, out i);
            Console.WriteLine("i=" + i);
            Console.WriteLine("ints=" + ints[0]);
            Console.ReadKey();
        }
    }
}
View Code

 

发表评论
用户名: 匿名