English 中文(简体)
Assignment "=" operator in VB.NET 1.1
原标题:

I m "cloning" objects in my code. For instance:

objClone = objOriginal

My question is:

  1. Does the assignment operator in VB.NET 1.1 do a member-by-member copy of the objOriginal to objClone or does objClone simply point as a reference to memory referenced by objOriginal?
最佳回答

It s a reference copy, if the type is a reference type (ie: classes). If it s a value type (Structure), it will do a member by member copy.

问题回答

What happens with the code that you show depends on what type objOriginal is:

  • If it is a reference type, objClone will reference the same instance as objOriginal
  • If it is a value type, objClone will be a new instance, with the same content as objOriginal

Note though, if it is a value type having any members being reference types, those members will reference the same instances as the original object (this is known as a shallow copy).

Examples:

Public Class Test
    Public Number As Integer
End Class

Dim objOriginal As New Test()
objOriginal.Number = 42
Dim objClone As Test
objClone = objOriginal

In this case, objClone and objOriginal will both reference the same instance of Test.

Public Structure Test
    Public Number As Integer
End Class

Dim objOriginal As New Test()
objOriginal.Number = 42
Dim objClone As Test
objClone = objOriginal

In this case, objClone and objOriginal will be different instances of Test, each with their own Integer instance in the Number field.

Public Class SomeValue
    Public Number As Integer
End Class
Public Structure Test
    Public Value As SomeValue
End Class

Dim objOriginal As New Test()
objOriginal.Value = New SomeValue()
objOriginal.Value.Number = 42
Dim objClone As Test
objClone = objOriginal

In this case, objClone and objOriginal will be two different instances of k, but both will reference the same instance of SomeValue through their Value member.

I m not sure about VB, but the C# version of assignment only does a shallow copy. (Edit: For reference types).





相关问题
Is Shared ReadOnly lazyloaded?

I was wondering when I write Shared ReadOnly Variable As DataType = New DataType() Or alternatively Shared ReadOnly Variable As New DataType() Is it lazy loaded or as the instance initializes? ...

Entertaining a baby with VB.NET

I would like to write a little application in VB.NET that will detect a baby s cry. How would I get started with such an application?

Choose Enter Rather than Pressing Ok button

I have many fields in the page and the last field is a dropdown with list of values. When I select an item in a dropdown and press Enter, it doesn t do the "Ok". Instead I have to manually click on Ok ...

ALT Key Shortcuts Hidden

I am using VS2008 and creating forms. By default, the underscore of the character in a textbox when using an ampersand is not shown when I run the application. ex. "&Goto Here" is not ...

Set Select command in code

On button Click I want to Set the Select command of a Gridview. I do this and then databind the grid but it doesn t work. What am i doing wrong? protected void bttnView_Click(object sender, ...

Hover tooltip on specific words in rich text box?

I m trying to create something like a tooltip suddenly hoovering over the mouse pointer when specific words in the richt text box is hovered over. How can this be done?

热门标签