Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我的对象是复制的内存还是指向原始对象的指针';什么是记忆?_C#_Oop_Memory Management - Fatal编程技术网

C# 我的对象是复制的内存还是指向原始对象的指针';什么是记忆?

C# 我的对象是复制的内存还是指向原始对象的指针';什么是记忆?,c#,oop,memory-management,C#,Oop,Memory Management,对不起,如果这个问题看起来很奇怪,我不知道该怎么说。因此,我不确定以前是否有人问过这个问题 以这段代码为例: Object obj = new Object(); Object obj2; obj2 = obj; 所以我的问题是: 当我将obj分配给obj2时,obj2是指向obj的内存,还是运行时正在分配与obj的内存相同的新内存块 谢谢,罗。obj2引用了obj指向的同一对象。由于它们指向同一对象,因此对obj2的修改“反映”在obj中 obj2引用的对象与ob

对不起,如果这个问题看起来很奇怪,我不知道该怎么说。因此,我不确定以前是否有人问过这个问题

以这段代码为例:

    Object obj = new Object();

    Object obj2;

    obj2 = obj;
所以我的问题是:

当我将
obj
分配给
obj2
时,
obj2
是指向
obj
的内存,还是运行时正在分配与
obj
的内存相同的新内存块


谢谢,罗。

obj2
引用了
obj
指向的同一对象。由于它们指向同一对象,因此对
obj2
的修改“反映”在
obj

obj2
引用的对象与
obj
指向的对象相同。由于它们指向同一对象,因此对
obj2
的修改“反映”在
obj

这里有一个简单的例子来说明它是一个参考,而不是一个副本

 public class ClassObject
    {
        public int entier;

        public ClassObject(int p_Initial)
        {
            this.entier = p_Initial;
        }
    }



        ClassObject obj1 = new ClassObject(2);
        Console.WriteLine(obj1.entier); ==> Console obj1.entier = 2
        ClassObject obj2 = obj1;
        obj2.entier = 5;

        Console.WriteLine(obj1.entier); ==> Console obj1.entier = 5
        Console.WriteLine(obj2.entier); ==> Console obj2.entier = 5

这里有一个简单的例子来说明它是一个参考,而不是一个副本

 public class ClassObject
    {
        public int entier;

        public ClassObject(int p_Initial)
        {
            this.entier = p_Initial;
        }
    }



        ClassObject obj1 = new ClassObject(2);
        Console.WriteLine(obj1.entier); ==> Console obj1.entier = 2
        ClassObject obj2 = obj1;
        obj2.entier = 5;

        Console.WriteLine(obj1.entier); ==> Console obj1.entier = 5
        Console.WriteLine(obj2.entier); ==> Console obj2.entier = 5

谢谢,这是我一直在寻找的答案。谢谢,这是我一直在寻找的答案。如果你想在C#中创建一个对象的副本,你可以使用IClonable接口du namespace System.object的实现如果你想在C#中创建一个对象的副本,你可以使用IClonable接口du namespace System.object的实现