梓囚徒貧圭�鮗� ○ 賜 ★ 辛酔堀貧和鍬匈��梓囚徒貧議 Enter 囚辛指欺云慕朕村匈��梓囚徒貧圭�鮗� ● 辛指欺云匈競何��
!!!!隆堋響頼��紗秘慕禰厮宴和肝写偬堋響��
End Sub
Public Sub DoSomething�┌�
_inst。Method�┌�
End Sub
Public ReadOnly Property Inst�┌� As DataType
Get
Return _inst
End Get
End Property
End Class
With generics�察�you can write a property that contains a reference to the base type。 Had
you used the pure interface´based code�察�the Inst property would need to be of type IExample�察�and
to get the same effect as the generics example�察�a cast would be involved。 A cast is not the
end of the world�察�but it is inconvenient and not type´safe�察�since you don¨t know if a cast will
work until you execute the code。
You can add multiple interfaces and classes as constraints�察�although you are limited。 The
limitations are identical to the limitations when subclassing a class or interface�此�
o You can subclass only a single class。
o You can subclass as many interfaces as desired�察�but they must be declared after the class。
´´´´´´´´´´´´´´´´´´´´´´Page 447´´´´´´´´´´´´´´´´´´´´´´´
CH AP T E R 1 6 * L E A R N I N G A B OU T O TH E R V IS U AL B A SI C T E C HN IQ U E S 425
Using the New Constraint
The purpose of the New constraint is to limit the data type to one that has a default constructor�察 �
as in this example�此�
Class Example��Of DataType As ��New����
Private _value As DataType
Public Sub New�┌�
_value = New DataType�┌�
End Sub
End Class
Without the New constraint�察�the bolded code cannot be piled。
The constructor that is defined with the New constraint does not take parameters�察�and it
would seem that this is a bother。 After all�察�you might want to instantiate the type with some
state。 What you can do is constrain DataType�察�and then instantiate the type using object initial
izers。 For example�察�the following is an interface that has a single property。
Interface IBase
Property Value�┌� As Integer
End Interface
bining the IBase interface and the New keyword as constraints�察�you could write the
following code。
Class Example��Of DataType As ��IBase�察�New����
Private _value As DataType
Public Sub New�┌�
_value = New DataType�┌� With ��。Value = 10��
End Sub
End Class
In the modified example�察�the bolded code instantiates DataType�察�and then using the
constraints�察�the object initializer that defines _value is possible。
Using the Class Constraint
The main purpose of the Class constraint is to indicate whether the generics type is a value
type or a reference type。 Here is an example of a type that wants to manage only reference types�此�
Class AssumeReferenceType��Of DataType As ��Class����
Private _value As DataType
Public Sub New��ByVal value As DataType��
End Sub
End Class
´´´´´´´´´´´´´´´´´´´´´´Page 448´´´´´´´´´´´´´´´´´´´´´´´
426 CH AP T E R 1 6 * L E A R N I N G A B OU T O TH E R V IS U AL B A SI C TE C H N IQ U E S
If you were to declare the AssumeReferenceType using an Integer�察�as shown in the following
example�察�the code would not pile。
Dim cls As AssumeReferenceType��Of Integer�� = _
New AssumeReferenceType��Of Integer����Nothing��
Nullable Types
In �察�Nothing means no value�察�and we all understand what it represents�察�right�拭�For example�察 �
the following code shows how to use Nothing。
Dim value As Object = Nothing
If value Is Nothing Then
Console。WriteLine�─�Yup a Nothing;��
End If
The example is obvious and does nothing useful。 If you attempted to call the Object。
ToString�┌� method on value�察�an exception would be generated。 So�察�what the code has created
is a variable value that references nothing and is nothing。 This works because the example uses
a reference type。 Let¨s see what happens when you assign a value to a value type that we
equate to no real value。
Dim value As Integer = 0
If value = 0 Then
Console。WriteLine�─�Yup a Nothing�殖殖拭┌�
End If
This time�察�value is not of the type Object�察�but is of the type Integer。 And value is assigned
a value of 0 to indicate no real value。 Now many of you will be saying�察 �Hey�察�wait a minute!
0 Nothing。 ̄ Yet�察�in the programming languages C���� and C�察�Nothing and 0 have the same
contextual meaning�察�so it¨s not so outlandish。
Visual Basic has a programming construct called the nullable type。 The nullable type solves the
problem of knowing whether or not a value type has been assigned。 This is needed when inter
acting with relational databases。 For example�察�there is no way to indicate that an integer value
is not assigned�察�since declaring a value type means declaring a stack variable�察�and it will have a
default value。 In other words�察�there is no chance a value type will have a null reference。
A nullable type in Visual Basic is used to define a value´type variable that might have a null
state。 In the value type example�察�the integer value was assigned a value of 0�察�but a value of
Nothing would have been more appropriate。 However�察�value types cannot be assigned a value
of Nothing�察�they must be assigned some valid value。
To further demonstrate the restrictions of a value type�察�the following is a Structure
declaration。
´´´´´´´´´´´´´´´´´´´´´´Page 449´´´´´´´´´´´´´´´´´´´´´´´
CH AP T E R 1 6 * L E A R N I N G A B OU T O TH E R V IS U AL B A SI C T E C HN IQ U E S 427
Structure ExampleStructure
Public value As Integer
End Structure
Here¨s how we might use it�此�
Dim ex As ExampleStructure = Nothing
The structure ExampleStructure is defined using the Structure keyword�察�which means that
ExampleStructure is a value type。 The next line�察�where the variable ex is assigned a value of
Nothing�察�will result in an action where nothing happens other than resetting the variable ex to
0。 And as was illustrated earlier�察�0 is not Nothing。
The inability to assign Nothing is odd�察�because structures behave similarly to reference
types in many ways。 Instantiating a default value of a structure is not always the right answer�察 �
since the data members might not have a default value。
The nullable type makes it possible for value types ��for example�察�structures�� to be nothing。
In Visual Basic�察�you define a nullable type by using the generics class Nullable or the
nullable type notation�察�as follows�此�
Dim ex As Nullable��Of ExampleStructure�� = Nothing
or
Dim ex As ExampleStructure�拭�= Nothing
Using nullable types�察�it is possible to assign a Nothing value to a value type。 To assign a
value to a nullable type�察�you need to explicitly assign the variable�察�as in the following example。
ex = New ExampleStructure�┌� With ��。value = 10��
And then to reference the structure!in particular�察�the property value!use the following
code。
Console。WriteLine�─┌──�& ex。Value。value & ;��;��
The additional reference of Value is the link between the reference type Nullable and the
value type ExampleStructure。
*Note Nullable types are not intended to be used in conjunction with reference types。 If you attempt to use
a nullable type with a reference type�察�you will get a