嗔秤戻幣�哉膵�云利匈嬉蝕湊蛸賜�塋床四衲���萩晦編報炎嘔囚^泡仟 ̄云利匈�《超噌�殻窟�嵌虜隆輓麈觚翹瀘卉韮�仍仍�。� 烏御危列
浪慕利 卦指云慕朕村 厘議慕尺 厘議慕禰 TXT畠云和墮 序秘慕杏 紗秘慕禰

VB2008貫秘壇欺娼宥(PDF鯉塀哂猟井)-及149嫗

梓囚徒貧圭�鮗� ○ 賜 ★ 辛酔堀貧和鍬匈��梓囚徒貧議 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 
卦指朕村 貧匯匈 和匯匈 指欺競何 壘��0�� 家��0��
隆堋響頼��紗秘慕禰厮宴和肝写偬堋響��
梁椣戻幣�� 梁心弌傍議揖扮窟燕得胎��傍竃徭失議心隈才凪万弌誌育断蛍�輌臆惨軼僑〃�燕慕得珊辛參資誼持蛍才将刮襲潜��範寔亟圻幹慕得 瓜寡追葎娼得辛參資誼寄楚署衛、持蛍才将刮襲潜填��