今天刚刚明白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();
}
}
}

ref和out的区别,值类型和引用类型的使用的更多相关文章

  1. 20151024_001_C#基础知识(静态与非静态的区别,值类型和引用类型,堆和栈的区别,字符串的不可变性,命名空间)

    1:我们把这些具有相同属性和相同方法的对象进行进一步的封装,抽象出来类这个概念. 类就是个模子,确定了对象应该具有的属性和方法. 对象是根据类创建出来的. 2:类:语法 [public] class ...

  2. 图解C#的值类型,引用类型,栈,堆,ref,out

    C# 的类型系统可分为两种类型,一是值类型,一是引用类型,这个每个C#程序员都了解.还有托管堆,栈,ref,out等等概念也是每个C#程序员都会接触到的概念,也是C#程序员面试经常考到的知识,随便搜搜 ...

  3. 值类型,引用类型,栈,堆,ref,out

    在网上收集... C#的值类型,引用类型,栈,堆,ref,out C# 的类型系统可分为两种类型,一是值类型,一是引用类型,这个每个C#程序员都了解.还有托管堆,栈,ref,out等等概念也是每个C# ...

  4. 转:图解C#的值类型,引用类型,栈,堆,ref,out

    C# 的类型系统可分为两种类型,一是值类型,一是引用类型,这个每个C#程序员都了解.还有托管堆,栈,ref,out等等概念也是每个C#程序员都会接触到的概念,也是C#程序员面试经常考到的知识,随便搜搜 ...

  5. C#中对值类型和引用类型的一点认识

    区别值类型和引用类型的重要一点就是值类型赋值的时候是给出一块内存空间,空间里放下要赋给值类型的值.而引用类型是开辟一块内存空间,空间里放下的是要赋给引用类型值的指向地址. 就像一个是复制了银行卡里的现 ...

  6. C#学习笔记之值类型与引用类型

    [TOC] C#学习笔记之值类型与引用类型 1.值类型与引用类型 1.1 深层区别 值类型与引用类型有不同的内存分布,这导致了不同的内存管理机制: 值类型由OS负责内存管理 引用类型由垃圾回收器(GC ...

  7. (11)C#值类型和引用类型,堆和栈,ref和out,装箱和拆箱

    一.值类型和引用类型定义 以内存中的存在方式可以把变量分成两大类型,值类型和引用类型. 值类型:系统只占用一块内存,数据直接存储在内存里. 引用类型:系统占用两块内存,一块存放地址,另一块存放实际数据 ...

  8. JAVA初学(1):值类型和引用类型的区别

    JAVA值类型和引用类型的区别(转)                                                          [定义] 引用类型表示你操作的数据是同一个,也就 ...

  9. C#类和接口、虚方法和抽象方法及值类型和引用类型的区别

    1.C#类和接口的区别接口是负责功能的定义,项目中通过接口来规范类,操作类以及抽象类的概念!而类是负责功能的具体实现!在类中也有抽象类的定义,抽象类与接口的区别在于:抽象类是一个不完全的类,类里面有抽 ...

  10. C#入门篇6-7:字符串操作 看看字符串的特殊之处 值类型与引用类型的区别

    //看看字符串的特殊之处值类型与引用类型的区别 public static void CompareString(string stra, string strb, int i) { #region ...

随机推荐

  1. Python多个版本安装!

    Python可以同时安装多个版本,目前我安装的是3.6和3.5,在Eclipse中使用3.6:在Visual Studio中使用3.5.如何让哪个版本的Python成为系统默认的解释器呢?通过调整不同 ...

  2. bootstrap-下拉菜单

    <!-- 1.给父级添加class为dropdown,或者给父级添加定位属性 2.给button添加data-toggle="dropdown"属性,并添加dropdown- ...

  3. sql工作问题总结

    1. sql排序:1. order by ……2. row_number() over(partition by …… order by ……) 使用说明:此函数适合做分组.排序,而不能在使用它分组的 ...

  4. angularJs编写多指令的情况

    本实例主要展示controller和link参数的使用.以及多个指令同时作用的情况. <!DOCTYPE html> <html ng-app="myModule" ...

  5. SQL Server2008 TIME类型

    SQL Server2008现在有了一个TIME数据类型,它允许你只存储一个时间值而没有时间.如果想要存储一个特定的时间信息而不涉及具体的日期时,这将非常的有用.TIME数据类型存储使用24小时制,它 ...

  6. [ZOJ 1003] Crashing Balloon (dfs搜索)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3 题目大意:给你a,b两个数,问当b由约数1到100组成时,a能否由其 ...

  7. Regional Changchun Online--Elven Postman(裸排序二叉树)

    Elven Postman Time Limit: 1500/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Tot ...

  8. IOS学习之路--BLOCK

    /* 1.定义block变量: 返回值类型 (^block变量名) (参数类型1, 参数类型2, ....); 2.给block变量赋值 block变量名 = ^(参数类型1 参数名称1, ..... ...

  9. (转)读取XML数据到treeView中

    原文地址,只为收藏:http://www.cnblogs.com/ylwn817/archive/2011/12/15/2288512.html /// <summary>        ...

  10. jQuery基础---filter()和find()

    这是jQuery里常用的2个方法.他们2者功能是完全不同的,而初学者往往会被误导. 首先 我们看.find()方法:现在有一个页面,里面HTML代码为;程序代码 <div class=" ...