值类型 引用类型 ref out

原创 2012年03月31日 16:41:42
  • 值类型主要由两类组成:结构和枚举。结构分为以下几类:Numeric(数值)类型 (整型 浮点型 decimalbool 用户定义的结构。基于值类型的变量直接包含值。将一个值类型变量赋给另一个值类型变量时,将复制包含的值。这与引用类型变量的赋值不同,引用类型变量的赋值只复制对对象的引用,而不复制对象本身。
  • 引用类型的变量又称为对象,可存储对实际数据的引用。包括:class interface delegate object string
  • 值类型变量直接包含其数据,这与引用类型变量不同,后者包含对其数据的引用。因此,向方法传递值类型变量意味着向方法传递变量的一个副本。方法内发生的对参数的更改对该变量中存储的原始数据无任何影响。如果希望所调用的方法更改参数的值,必须使用 ref 或 out 关键字通过引用传递该参数。
  • 当ref应用于值类型参数时,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。
  • 当ref应用于引用类型参数时,允许被调用的方法修改该引用所引用的对象。
  • 当通过值传递引用类型的参数时,有可能更改引用所指向的数据,如某类成员的值。但是无法更改引用本身的值;也就是说,不能使用相同的引用为新类分配内存并使之在块外保持。若要这样做,应使用 ref 或 out 关键字传递参数。如
  •       void change(ref MyData data1, MyData data2)
          {
             data1.k = 6;
             data1 = new MyData(10);
             data2.k = 6;
             data2 = new MyData(10);
          }
          void Main(string[] args)
          {
             MyData data_1 = new MyData(8);
             MyData data_2 = new MyData(8);
             change(ref data_1, data_2);
             int k1 = data_1.k; // k1 = 10;
             int k2 = data_2.k; // k2 = 6;
          }
  • 传递到 ref 参数的参数必须最先初始化。这与 out 不同,out 的参数在传递之前不需要显式初始化。尽管 ref 和 out 在运行时的处理方式不同,但它们在编译时的处理方式是相同的。因此,如果一个方法采用 ref 参数,而另一个方法采用 out 参数,则无法重载这两个方法。
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

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

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

C#中的ref,out,值类型,引用类型的笔记

因为基础不好,所以重新读C#高级编程这本书,顺道做下笔记 一:基本类型,内置的CTS值类型表示基本类型,分为值类型和引用类型 值类型:内置的CTS值类型表示基本类型,包括8个整型,浮点类型,dec...

C#方法的参数 Ref Out Params 4种类型的参数

之前学习C#没有做笔记的习惯,因此有些基础上的东西并没有很好地整理起来,虽然这些东西比较常用,因此也没什么影响,但总觉得不整理一下感觉老是有种陌生感。今天特别整理一下C#4种类型的参数。 一、按...

C#参数类型 params、out和ref

parmas类型的参数 using System; public class MyClass { public static void UseParams(params int[] li...

c# 方法参数(传值,传引用,ref,out,params,可选参数,命名参数)

一、方法参数的类型----值类型和引用类型        当方法传递的参数是值类型时,变量的栈数据会完整地复制到目标参数中即实参和形参中的数据相同但存放在内存的不同位置。所以,在目标方法中对形参所做...

C#基础:值类型、引用类型与ref关键字

在C#中,ref的意思是按引用传递。可以参考C++: int a = 10, b = 20; void swap(int x, int y) { int tem...
  • cpcpc
  • cpcpc
  • 2011-09-05 16:07
  • 968

ref传递引用类型

在C#中,变量分为两种类型:一种是值类型,另一种是引用类型.任何称为"类"的类型都是引用类型,而任何结构和枚举都是值类型(System.Int32结构,System.DayOfWeek枚举).在方法间...

引用传递的参数类型,加不加ref是不同的

教科书上说引用传递的参数引用时,加不加ref都可以,都会改变参数原来的值,值传递参数引用时如果想要改变原来的值,必须加ref。以前遇到的大部分情况确实是如此,引用传递类型比如ArrayList,Dat...

关于引用类型ref的运用

一直没有弄明白ref的用法,今天用了一下msdn,发现竟然是如此的简单,用的时间要注意 若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字。 一句话把我的迷津全部点开了 ...

C#中参数为引用类型加ref和不加的区别

首先说说两种数据类型:值类型和引用类型的区别值类型包含int、double、char、bool、struct、还有枚举enum, 声明一个值类型的变量会在栈上分块空间用来存储变量的值,如int a=...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)