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

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

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

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

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

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace Demo
{
class Program
{
static void SomeFunction(int[] ints, int i)
{
ints[] = ;
i = ;
}
static void Main(string[] args)
{
int i = ;
int[] ints = { , , , , };
Console.WriteLine("i=" + i);
Console.WriteLine("ints=" + ints[]);
SomeFunction(ints, i);
Console.WriteLine("i=" + i);
Console.WriteLine("ints=" + ints[]);
Console.ReadKey();
}
}
}

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[] = ;
i = ;
}
static void Main(string[] args)
{
int i = ;
int[] ints = { , , , , };
Console.WriteLine("i=" + i);
Console.WriteLine("ints=" + ints[]);
SomeFunction(ints, ref i);
Console.WriteLine("i=" + i);
Console.WriteLine("ints=" + ints[]);
Console.ReadKey();
}
}
}

所以我认为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[] = ;
i = ;
}
static void Main(string[] args)
{
int i;
int[] ints = { , , , , };
//Console.WriteLine("i=" + i);
Console.WriteLine("ints=" + ints[]);
SomeFunction(ints, out i);
Console.WriteLine("i=" + i);
Console.WriteLine("ints=" + ints[]);
Console.ReadKey();
}
}
}

最新文章

  1. 树莓派笔记之使用netselect选择最快Raspbian软件源
  2. 手机驱动无法正常安装,出现adb interface失败
  3. 升级openssl
  4. BZOJ 1565 植物大战僵尸(最大权闭合图)
  5. PHP表单验证内容是否为空
  6. pull解析和sax解析的差别
  7. 批量文件重命名工具-极力推荐 advanced renamer
  8. JVM学习(二)
  9. 事后诸葛亮分析——Beta版本
  10. .Net语言 APP开发平台——Smobiler学习日志:如何快速实现手机上的资源上传功能
  11. 【洛谷P3369】【模板】普通平衡树题解
  12. ADO工具类
  13. struts2 中 paramsPrepareParamsStack 拦截器
  14. Asp.net Mvc post表单提交多个实体模型
  15. golang之配置环境
  16. (转)SQL Server 列转行
  17. 关于cisco路由器配置的一些参数
  18. API图片路径和超链接语义化转换
  19. C++&VS项目学习
  20. logback&slf4j学习笔记

热门文章

  1. Getting started with SciPy for .NET
  2. IronPython调用C# DLL函数方法
  3. git撤销命令
  4. RPM软件包制作
  5. 89、Android EditText 悬浮停靠
  6. JAVA中抽象类的一些总结
  7. /dev/shm
  8. DISTINCT后按照DISTINCT之前的某列进行排序
  9. 用浏览器打开本地html 直接到首页 的解决方法
  10. CodeForces 604C 【思维水题】`