返回信息流一段简单的C#代码:
namespace CSharpOOPCodes
{
class MyClass
{
public int val;
}
struct myStruct
{
public int val;
}
class Program
{
static void Main(string[] args)
{
MyClass objectA= new MyClass();
MyClass objectB=new MyClass();
objectB=objectA;
objectA.val=10;
objectB.val=20;
Console.WriteLine("objA.val={0},objB.val={1}",objectA.val,objectB.val);
}
}
}
最后输出的结果是:objA.val=20,objB.val=20
同样的程序写在C++里:
#include "stdafx.h"
class MyClass
{
public:
int val;
MyClass()
{
val = 0;
}
};
int main()
{
MyClass objA;
MyClass objB = objA;
objA.val = 10;
objB.val = 20;
printf("objA.val=%d,objB.val=%d", objA.val, objB.val);
return 0;
}
输出的结果就是objA.val=10,objB.val=20
请问这是为什么?
这是一条镜像帖。来源:北邮人论坛 / dot-net / #4533同步于 2014/8/14
该镜像源已超过 30 天没有更新,可能在源站已被删除。
dotNET机器人发帖
[讨论][问题]一个关于C#中类和C++类的区别的问题,跪求给大神解
Linuxer1994
2014/8/14镜像同步5 回复
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
C#: B = A ,那么A B两个引用指向堆里面同一个对象,所以后面你怎么改,其实修改的都
是同一个对象.
C++: B = A, 我猜是调用了赋值构造函数, A B 指向两个不同的对象,各修改各的.
【 在 Linuxer1994 (Linuxer1994) 的大作中提到: 】
: 一段简单的C#代码:
: namespace CSharpOOPCodes
: {
: ...................
正解
【 在 shenlei 的大作中提到: 】
: C#: B = A ,那么A B两个引用指向堆里面同一个对象,所以后面你怎么改,其实修改的都
: 是同一个对象.
: C++: B = A, 我猜是调用了赋值构造函数, A B 指向两个不同的对象,各修改各的.
【 在 shenlei 的大作中提到: 】
: C#: B = A ,那么A B两个引用指向堆里面同一个对象,所以后面你怎么改,其实修改的都
: 是同一个对象.
: C++: B = A, 我猜是调用了赋值构造函数, A B 指向两个不同的对象,各修改各的.
那C#就是没办法只让数值传递而不指向同一个对象么?
1. struct对象就在空间上
2. 使用clone方法构造新对象(更推荐序列化 反序列化生成一个新对象)
【 在 Linuxer1994 (Linuxer1994) 的大作中提到: 】
: 那C#就是没办法只让数值传递而不指向同一个对象么?
【 在 shenlei 的大作中提到: 】
: 1. struct对象就在空间上
: 2. 使用clone方法构造新对象(更推荐序列化 反序列化生成一个新对象)
:
谢谢~