今天刚刚明白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. APPDelegate----launchOptions启动类型

    IOS 中的 AppDelegate.m/h 文件是很重要的呢,因为它是对 Application 的整个生命周期进行管理的. 先明白,每个iPhone应用程序都有一个UIApplication,UI ...

  2. Python标准库02 时间与日期 (time, datetime包)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python具有良好的时间和日期管理功能.实际上,计算机只会维护一个挂钟时间(wa ...

  3. 鼎信通达gsm网关和asterisk对接的调试

    设备型号:4gsm卡,型号是DWG2000C-4Egsm网关IP地址: 10.3.6.250asteriskIP地址: 10.3.6.251 1)首先在asterisk里面添加到gsm网关的中继,并做 ...

  4. Citrix 服务器虚拟化之八 Xenserver虚拟机模版

    Citrix 服务器虚拟化之八 Xenserver虚拟机模版 XenServer与VMware不同,Vmware只能将现有的VM转换成模版,而XenServer具有两种方法:一种是将现有 VM 转换为 ...

  5. Servlet中的请求转发和重定向

    跳转和重定向 有的时候客户端请求到达服务端后需要对请求重新转发到其它Servlet甚至别的服务器,这就需要跳转和重定向. 区别 一般来说,跳转是服务器内部跳转,例如将请求从一个Servlet转发给另外 ...

  6. [SQL]动态sql语句基本语法

    动态sql语句基本语法 :普通SQL语句可以用Exec执行 eg: Select * from tableName Exec('select * from tableName') Exec sp_ex ...

  7. 用JSON方式回调服务器

    <script language="javascript"> $(function(){ $.getJSON('http://xxx/system/ecmall_ins ...

  8. Git简单使用

    删除本地旧分支,拉取新分支 #!/bin/bash set -e cd /project/ git pull git fetch ori --prune git branch -r|sed 's/or ...

  9. ReferenceError: Sys is not defined

    项目框架MVC3 <form action="/Organization/Update" method="post" onclick="Sys. ...

  10. sql 2008 r2

    http://jingyan.baidu.com/article/6c67b1d6ca06f02787bb1ed1.html