友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
狗狗书籍 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

VB2008从入门到精通(PDF格式英文版)-第198章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!






Using the Type Constraint 



Type constraints allow you to associate a minimal type with the  generics parameter。 For  

example; suppose this interface is defined: 



    Interface IExample  

        Sub Method() 

    End Interface 



     Adding an  IExample constraint to the  generics parameter allows you to define a class  

as follows: 



Class ExampleMgr(Of DataType As { IExample})  

    Private _inst As DataType 



    Public Sub New(ByVal inst As DataType)  

        _inst = inst 

    End Sub 



    Public Sub DoSomething()  

        _inst。Method() 

    End Sub 

End Class 



     In the example; the constraint of IExample allows a developer to call Method()。 If the constraint  

were not there; the reference to Method would generate a piler error; because Method() is  

not a method of DataType。 

     But is this ability to reference a method an advantage? After all; you could write the  

ExampleMgr code without using  generics; like this: 


…………………………………………………………Page 446……………………………………………………………

424       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 ExampleMgr  

              Dim _inst As IExample 



              Public Sub New(ByVal inst As IExample) 

                  Me。_inst = inst 

              End Sub 



              Public Sub DoSomething()  

                  _inst。Method() 

              End Sub 

          End Class 



               The  generics code and the interface…based code do the exact same thing; and using  

           generics offers no advantage in this example。 But that is not always the case。 Consider the  

          following modified example of  ExampleMgr。 



          Class ExampleMgr(Of DataType As { IExample }) 

              Dim _inst As DataType  



              Public Sub New(ByVal inst As IExample) 

                  Me。_inst = CType(inst; DataType) 

              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。 

          ToSt
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!