开发者

Object Copy simple question?

If copying an object just create a new reference to the same object in memory then i don't understand why it is useful, because it only creates another name for the same object.

Copy, mean开发者_C百科s for me, creating a clone of the object in another memory location.

Then i could manipulate 2 separate objects which are the same only at the moment of their copy but whom their live will be different.

I use C#. Can someone explain me... Thanks John


Copying usually means actually creating a new object. However, the new object may be a shallow copy, so it may not actually hold references to new copy of the fields.

It's possible that the class you are looking at is Immutable, and the class designer decided that there was no need for the memory overhead.


Copying by reference is useful behaviour when you want to "pass around" an object to many components, either to allow many components to modify the state of the single object or to allow the functionality of the object to be used by multiple components.

Additionally, passing by reference avoids copying values, which can often produce a smaller memory footprint for an application.

If you wish, you can implement a Clone method on an object which will perform the behaviour you're asking for, allowing you to have a separate object to work with.

Lastly, if the behaviour of passing by reference doesn't seem natural for your object (for example your object is a fundamental value such as coordinate data), you can create a struct instead of a class. A struct or "structure" is copied by value, so when you pass it to a method, the entire object is copied and the copy passed to the method.


there are 3 kinds of copy

  • reference copy :giving another name to the object
  • shallow Copy : will create another copy of the object skeleton without the inner data
  • deep copy : will create another copy of the object and the data

you can read more about object copy in this link http://en.wikipedia.org/wiki/Object_copy


You are right in your understanding that there are two, (actually three if you consider deep vs shallow copies) ways to reproduce a reference object.

  1. You can copy the variables address into another variable (Same object on the Heap, now with another reference to it), or

You can create a new object on the heap and copy the values of the original objects properties and fields into the new object. This is generally called a Clone, and can be done in two ways Shallow or Deep.

  1. Shallow Copy. Here you only copy primitives, and, where the object has properties which reference other reference types, only copy the reference, (i.e., the address), this is called a shallow copy, or,

  2. Deep Copy. Here you copy primitives, and you can create new objects for each property which references another reference type.


You are right that copying creates a new object. I think the misconception comes from thinking of objects like primitives. Copying a primitive value and copying an object is done in different ways.

int x = 5;
int y = x;

y is a copy of x.

Object a = new object();
Object b = a;

b is a reference to a rather than a copy of a. To copy a you do need to write specific code to clone the object yourself.


I believe someone else will complain if Microsoft chooses implementing it in your way. It depends on the context that you using it to say which way is better. It's wise to take more efficient way as the default implementation.

Also, reference type is kind of like a pointer, so it makes sense to just copy the "pointer" itself in this case.

If you find this behavior is not what you desired, you can use your own implementation as well.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜