梓囚徒貧圭�鮗� ○ 賜 ★ 辛酔堀貧和鍬匈��梓囚徒貧議 Enter 囚辛指欺云慕朕村匈��梓囚徒貧圭�鮗� ● 辛指欺云匈競何��
!!!!隆堋響頼��紗秘慕禰厮宴和肝写偬堋響��
data member because it belongs to the
custom type declaration
Figure 4´4。 Declaring custom types
When declaring user´defined types�察�the data members and methods are declared inside
the block of code。 You can think of the declaration as the writing on the outside of the box�察�and
anything in the block of code as the contents of the box。 The custom types ��MyValueType and
MyReferenceType�� as declared in Figure 4´4 do not have a scope identifier。 Think of a scope identifier
as defining who has access to your pockets and wallet。 In the case of the types in the example�察 �
the scope is like saying that your spouse is allowed to peek into your wallet�察�but strangers
cannot。 In other words�察�the types cannot be used outside their own namespace。
If the Public keyword had been in front of the type identifier�察�then the user´defined type
would be exposed like a wallet that is allowed to be peeked into by the general public。 This means
the types can be used by other code。 In the case of the wallet�察�it¨s a bad idea to have unfettered
public scope�察�but sometimes public scope is desirable when you are able to control its access。
And you do this every time you pay for something by handing a credit card to the cashier。 In
that case�察�you are publicly exposing parts of your wallet under your supervision。 In code terms�察 �
this means making your types public�察�but not necessarily making the data members public。
Next�察�consider the code in Figure 4´5。 It instantiates MyValueType and assigns it to another
variable of the same type。
The example in Figure 4´5 illustrates what happens to two variables when one is instanti
ated and assigned to the other�察�and then the other is modified。 You want to understand how
each data type is modified when an interaction with another type occurs。
´´´´´´´´´´´´´´´´´´´´´´Page 105´´´´´´´´´´´´´´´´´´´´´´´
CH AP T E R 4 * L E A R N I N G A B OU T D AT A S TR U CT U R E S�察 �DE CI SI ON S�察 �A N D L O OP S 83
To create a valid instance
Variable var is declared�察 �associated with the
but a declaration does not variable var�察�you need to
Another way to associate a
imply a valid instance allocate the object using valid instance with a variable is
the New keyword
to assign the variable
��e。g。�察�copiedVar�� from another
variable that contains a valid
Dim var As MyValueType = New MyValueType�┌�
Dim copiedVar As MyValueType = var instance ��e。g。�察�var��
Console。WriteLine�─�var value=; & var。value & _
; copiedVar value=; & copiedVar。value�� When an instance is allocated�察�the data
var。value = 10 members are assigned their appropriate
Console。WriteLine�─�var value=; & var。value & _ default value�察�which is 0 for Integer and most
; copiedVar value=; & copiedVar。value��
numbers。 For strings�察�it is an empty buffer。
These lines display the empty values。
The value of var。value is
modified from 0 to 10 The contents of var and copiedVar
are displayed again to show
which variable has been modified
Figure 4´5。 Using a custom value type
As a parison�察�the same operations can be carried out using a reference type�察�where the
reference code is as follows�此�
Dim val As MyReferenceType = New MyReferenceType�┌�
Dim copiedVal As MyReferenceType = val
Console。WriteLine�─�val value=; & val。value & _
; copiedVal value=; & copiedVal。value��
val。value = 10
Console。WriteLine�─�val value=; & val。value & _
; copiedVal value=; & copiedVal。value��
So�察�if two code pieces are functionally identical�察�with the single difference being their type
��value type versus reference type���察�will they generate the same results�拭�
Running both code pieces results in the following output�此�
var value=0 copiedVar value=0
var value=10 copiedVar value=0
val value=0 copiedVal value=0
val value=10 copiedVal value=10
Looking closely at the results�察�you see that two functionally identical code pieces that differ
only in the variable type they use generate pletely different results�此 �
´´´´´´´´´´´´´´´´´´´´´´Page 106´´´´´´´´´´´´´´´´´´´´´´´
84 CH AP T E R 4 * L E A R N IN G AB OU T D AT A S TR U CT U R E S�察 �DE CI SI ON S�察 �A N D L O OP S
o When you assign and modify a value type�察�only the contents of the modified variable
change。
o When you assign and modify a reference type�察�the original object changes�察�so the original
variable and assigned variable change because they both point to the same original object。
This example demonstrates that when defining user´defined types�察�you need to be careful
how you treat value and reference types。
As you learned in Chapter 2�察�a value type is stored on the stack。 Thus�察�declaring a user
defined value type me