`
happmaoo
  • 浏览: 4340977 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

C#值传递引用类型数据的问题

阅读更多

今天做了道题,大概可以简化如下

public class C

{

public int i = -1;

public C(int i)

{

this.i = i;

}

public static void set(C c)

{

c.i = 0;

c = new C(13);

}

}

class Program

{

static void Main(string[] args)

{

C c = new C(12);

C.set(c);

Console.WriteLine(c.i.ToString());

Console.Read();

}

}

输出是多少?

我选择的12,但是结果是0。原因解释:

这里传入的是引用,在复制的过程中,复制了指向调用者的对象的引用。 这里传入的其实是一个引用,在复制的过程中,复制了指向调用者的对象的引用,在调用set()方法与调用者指向同一个对象,所以可以改变状态数据,但是在调用的方法体内,重新实例化,却是不行的。Andrew Troelsen的书中写道:If a reference type is passed by value, the callee may change the values of the object’s state data but not the object it is referencing. 如果按值传递引用类型,被调用者可能改变对象的状态数据的值,但不能够改变所引用的对象。

分享到:
评论

相关推荐

    值类型和引用类型的区别

    似乎“值类型和引用类型的区别”是今年面试的流行趋势,我已然是连续三次(目前总共也就三次)面试第一个问题就遇到这个了,这是多大的概率啊,100%. 言归正传,咱还是先来探讨探讨这二者之间有什么区别吧。记得有...

    深入C#数据类型巩固

    深入C#数据类型 一、值类型、引用类型 二、详解值类型 三、引用类型详解 四、参数传递 五、装箱和拆箱 六、静态

    C#调用C++ Dll关于结构体数组引用的传递及解析使用的展示代码

    资源代码演示的是c#代码调用c++ DLL 的方式。该演示为原创,绝非搬砖。解决了c# 调用 C++ Dll获取相关信息之如何传递结构体数组引用以及如何处理获取到的结构体数组数据的问题。

    C#中的值传递和引用传递详细解析

    二、传递值类型参数值类型变量直接包含其数据,这与引用类型变量不同,后者包含对其数据的引用。因此,向方法传递值类型变量意味着向方法传递变量的一个副本。方法内发生的对参数的更改对该变量中存储的原始数据无...

    C#使用Http Post方式传递Json数据字符串调用Web Service

    C#中通过直接添加引用的方来调用Web Service的方式不够灵活,故采取手动发送Http请求的方式来调用Web Service。最后选择使用Post方式来调用Web Service

    c#中委托,事件和BeginInvoke在进程间传递消息的作用

    使用委托,事件和BeginInvoke从另外一个cs文件向form.cs文件传递数据,并把数据赋值给窗体控件

    C#微软培训资料

    14.4 继承中关于属性的一些问题.169 14.5 小 结 .172 第四部分 深入了解 C#.174 第十五章 接 口 .174 15.1 组件编程技术 .174 15.2 接 口 定 义 .177 15.3 接口的成员 .178 15.4 接口的实现 .182 ...

    c#:CTS类型系统

    因此引用类型大小都是固定的(虽然它实际关联其他部分,但是你传递引用类型不需要传递这些,只需要传递指针),而值类型有不同的大小。 所有类型都从System.Object派生,包括值类型分支。所有值类型都是System.Value...

    浅谈C#中对引用类型的误解

    值类型和引用类型作为两个非常基础而且很重要的概念,一般我们都是在最开始的时候学的,你听到的可能是这样的:值类型传递的是具体的值(副本),引用类型传递的是引用,对于前者大家都不会有什么疑惑,但是在引用...

    C#中的数组作为参数传递所引发的问题

    如果参数在使用过程中被意外修改,将会带来不可预知的结果,而且这种错误很难被检查到,所以我们在设计方法参数的时候,要充分考虑传递引用类型参数或者引用方式传递引用类型参数可能带来的后果。 如果一个数据在...

    Visual C# 2010程序设计教程(教程PPT+源代码)

    7.2.1 值类型参数传递 7.2.2 引用类型参数传递 7.2.3 输出类型参数传递 7.2.4 数组类型参数传递 7.3 静态方法 7.4 方法的重载 7.5 外部方法 7.6 操作符重载 7.6.1 一元操作符的重载 7.6.2 二元操作符的重载 7.7 本章...

    CLR.via.C#.(中文第3版)(自制详细书签)Part2

    · 理解基元类型、值类型和引用类型的行为,从而最高效地定义和使用它们 · 使用泛型和接口来定义可重用的算法 · 高效使用特定的CLR类型——委托、枚举、定制attribute、数组和字符串 · 理解垃圾回收器是如何管理...

    在一小时内学会 C#(txt版本)

    值类型是在堆栈中分配的数据类型。它们包括了: ? 除字符串,所有基本和内建类型 ? 结构 ? 枚举类型 引用类型 引用类型在堆(heap)中分配内存且当其不再使用时,将自动进行垃圾清理。和 C++ 要求用户显示创建 ...

    C# winform窗体间传值(使用委托或事件)

    C#winform窗体间传值,三种方法示例,注释详细。使用方法:使用vs2013打开编译运行即可; 工程中总共介绍了三种方法: ###方法1:通过保存对象的引用调用其方法实现对子窗体的控制; ###方法2:通过委托,在子窗体...

    c#学习笔记.txt

    结构是值类型,而类是引用类型。 2, 装箱和拆箱(取消装箱) 装箱是值类型到 object 类型或到该值类型所实现的任何接口类型的隐式转换。将一个值的值装箱会分配一个对象实例并将该值复制到新的对象中。关键字 object. ...

    C#和Labview资料

    ¨5中间语 言 … ¨ ¨ … … … …… … …61.3.1 面向对象和接口的支持………61.32 不同的值类型和引用类型∴·…71,3.3 强数据类型化¨………………81.3.4 通过异常处理错误…¨……△21.3.5 特性的使用…………...

    CLR.via.C#.(中文第3版)(自制详细书签)

    · 理解基元类型、值类型和引用类型的行为,从而最高效地定义和使用它们 · 使用泛型和接口来定义可重用的算法 · 高效使用特定的CLR类型——委托、枚举、定制attribute、数组和字符串 · 理解垃圾回收器是如何...

    浅析C# 中object sender与EventArgs e

    了解C#中的预定义事件处理机制 在写代码前我们先来熟悉.net框架... 注意这里的参数,前者是一个对象(其实这里传递的是对象的引用,如果是button1的click事件则sender就是button1),后面是包含事件数据的类的基类。

    浅析C#中object sender与EventArgs e

    注意这里的参数,前者是一个对象(其实这里传递的是对象引用,如果是button1的click事件则sender就是button1),后面是包含事件数据的类的基类。 其实简单点说就是对象(object)sender导致了某个事件的发生,事件的...

Global site tag (gtag.js) - Google Analytics