《VB2008从入门到精通(PDF格式英文版)》第199章


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 Visual Basic piler error。 Nullable types are designed
for use by value types; and there is no other mystical or magical reason to use a nullable type。 
Partial Classes and Methods 
By default; whenever you create a type; you must declare the plete type in one file and as
one entity。 For example; the following class would need to be declared in the context of a single file。 
…………………………………………………………Page 450……………………………………………………………
428 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 
Class Example
Const BaseValue as Integer = 10 
Public Sub AddNumbers(ByVal value1 As Integer; _ 
ByVal value2 As Integer; _ 
ByRef response As Integer)
response = BaseValue + value1 + value2 
End Sub 
End Class 
The Example class has a single method AddNumbers; and the method implementation adds
two numbers to a base value (BaseValue)。 Everything is in a single file。 But suppose you wanted
to automatically generate Example; and have it generate the data member BaseValue; but not
the method AddNumbers。 To do that; you would need to split the class into two separate classes;
where one class subclasses the other: 
Class BaseGenerated
Protected Const BaseValue As Integer = 10 
End Class 
Class Example : Inherits BaseGenerated
Public Sub AddNumbers(ByVal value1 As Integer; _ 
ByVal value2 As Integer; _ 
ByRef response As Integer)
response = BaseValue + value1 + value2 
End Sub 
End
小说推荐
返回首页返回目录