嗔秤戻幣�哉膵�云利匈嬉蝕湊蛸賜�塋床四衲���萩晦編報炎嘔囚^泡仟 ̄云利匈��
源平慎弌傍利 卦指云慕朕村 紗秘慕禰 厘議慕尺 厘議慕禰 TXT畠云和墮 〆辺茄欺厘議箝誓匂〇

VB2008貫秘壇欺娼宥(PDF鯉塀哂猟井)-及38何蛍

酔楯荷恬: 梓囚徒貧圭�鮗� ○ 賜 ★ 辛酔堀貧和鍬匈 梓囚徒貧議 Enter 囚辛指欺云慕朕村匈 梓囚徒貧圭�鮗� ● 辛指欺云匈競何! 泌惚云慕短嗤堋響頼���誅卒亮茂�俊彭堋響��辛聞喘貧圭 "辺茄欺厘議箝誓匂" 孔嬬 才 "紗秘慕禰" 孔嬬��



                 tation in the base class。 



          Scenario 3�此�Implementing an Interface 



              Interface IInterface  

                  Sub Method�┌� 

              End Interface 



              Class Implementation  

                  Implements IInterface 

                  Public Sub Method�┌� Implements IInterface。Method 

                      Console。WriteLine�─�Implementation。Method;�� 

                  End Sub 

              End Class 



              Module Test  

                  Public Sub Run�┌�  

                      Dim implementation As Implementation = New Implementation�┌� 

                      Dim inst As IInterface = implementation 



                      ' Calls Implementation。Method 

                      implementation。Method�┌� 

                      ' Calls Implementation。Method 

                      inst。Method�┌� 

                  End Sub 

              End Module 



               o Keywords used�此�none。 



               o The class that implements the interface has a behavior�察�like when a class subclasses and  

                 implements a MustOverride method。 



               o Whether the variable is an interface type or an implementation type�察�the method  

                  Implementation。Method�┌� is called。 


´´´´´´´´´´´´´´´´´´´´´´Page 213´´´´´´´´´´´´´´´´´´´´´´´

                          CH AP T E R   7   *    L E AR N IN G   AB O U T   CO M P O N E N TS   AN D   C L AS S  H I E R AR C HI E S 191 



Scenario 4�此�Implementing Two Interfaces with Same Method/Property Name 



   Interface IInterface1 

        Sub Method�┌� 

    End Interface 



    Interface IInterface2  

        Sub Method�┌� 

    End Interface 



    Class Implementation  

        Implements IInterface1�察�IInterface2 

        Public Sub Method1�┌� Implements IInterface1。Method 

            Console。WriteLine�─�Implementation。IInterface1。Method;�� 

        End Sub 



        Private Sub Method2�┌� Implements IInterface2。Method 

            Console。WriteLine�─�Implementation。IInterface2。Method;�� 

        End Sub 

    End Class 



    Module Test 

        Public Sub Run�┌�  

            Dim implementation As Implementation = New Implementation�┌� 

            Dim inst1 As IInterface1 = implementation 

            Dim inst2  As IInterface2 = implementation 



            ' Calls Implementation。Method1 

            inst1。Method�┌� 

            ' Calls Implementation。Method2 

            inst2。Method�┌� 

        End Sub 

    End Module 



    o  Keywords used�此�special notation for the implementation of a particular interface method  

       ��for example�察�Implements IInterface1。Method and Implements IInterface2。Method��。 



    o  The methods that are converted to implement a particular interface can still be called。  

       In the example�察�Method1�┌� is declared as Public�察�and thus if you have a reference to  

       Implementation�察�then you can call Method1�┌�。 



Scenario 5�此�Implementing an Interface That Allows Overriding 



    Interface IInterface  

        Sub Method�┌� 

    End Interface 


´´´´´´´´´´´´´´´´´´´´´´Page 214´´´´´´´´´´´´´´´´´´´´´´´

192      CH AP T E R   7   *    L E A R N IN G   AB OU T   CO M P O N E N TS   AN D  C L AS S  H I E R AR C H IE S 



              Class Implementation  

                  Implements IInterface 



                  Public Overridable Sub Method�┌� Implements IInterface。Method 

                      Console。WriteLine�─�Implementation。Method;�� 

                  End Sub 

              End Class 



              Class ImplementationDerived  

                  Inherits Implementation 



                  Public Overrides Sub Method�┌�  

                      Console。WriteLine�─�ImplementationDerived。Method;�� 

                  End Sub 

              End Class 



              Module Test  

                  Public Sub Run�┌�  

                      Dim implementation As ImplementationDerived = _ 

                        New ImplementationDerived�┌� 

                      Dim inst As IInterface = implementation 



                      ' Calls ImplementationDerived。Method 

                      implementation。Method�┌� 

                      ' Calls ImplementationDerived。Method 

                      inst。Method�┌� 

                  End Sub 

              End Module 



              o  Keywords used�此�Overridable and Overrides。 



              o  By default�察�when you implement an interface without using the Overridable keyword�察 �

                 you are saying that the derived class can overload only the method。 In many cases�察�this  

                 is appropriate�察�as you will want to override the method and thus will need to use the  

                 Overridable and Overrides keywords。  



              o  This is a mon problem�察�and most beginning Visual Basic programmers are puzzled  

                 by the overloading behavior。 



          Scenario 6�此�An Inheritance Tree That Overrides and Overloads 



              Class Base  

                  Public Overridable Sub Method�┌�  

                      Console。WriteLine�─�Base。Method;�� 

                  End Sub 

              End Class 


´´´´´´´´´´´´´´´´´´´´´´Page 215´´´´´´´´´´´´´´´´´´´´´´´

                          CH AP T E R   7   *    L E AR N IN G   AB O U T   CO M P O N E N TS   AN D   C L AS S  H I E R AR C HI E S 193 



    Class Derived1 

        Inherits Base 



        Public Overrides Sub Method�┌�  

            Console。WriteLine�─�Derived1。Method;�� 

        End Sub 

    End Class 



    Class Derived2  

        Inherits Derived1 



        Public Overloads Overridable Sub Method�┌�  

            Console。WriteLine�─�Derived2。Method;�� 

        End Sub 

    End Class 



    Class Derived3  

        Inherits Derived2 



        Public Overrides Sub Method�┌�  

            Console。WriteLine�─�Derived3。Method;�� 

        End Sub 

    End Class 



    Module Test  

        Public Sub Run�┌�  

            Dim derivedCls As Derived3 = new Derived3�┌� 

            Dim baseCls As Base = derivedCls 

            Dim derived2cls As Derived2 = derivedCls 



            ' Calls Derived3。Method 

            derivedCls。Method�┌� 

            ' Calls Derived1。Method 

            baseCls。Method�┌� 

            ' Calls Derived3。Method 

            derived2cls。Method�┌� 

        End Sub 

    End Module 



    o  Keywords used�此�Overridable�察�Overrides�察�and Overloads。 



    o  The inheritance hierarchy is saying that Derived1。Method�┌� overrides the behavior of  

       Base。Method�┌�。 Derived2。Method�┌� overloads the behavior of Derived1。Method�┌��察�while  

       establishing a new overriding base method。 Derived3。Method�┌� overrides the behavior  

       Derived2。Method�┌��察�and not Base。Method�┌� ��very important��。 



    o  When confronted with a plex inheritance hierarchy as illustrated by scenario 6�察�it is  

       important that you start at the base class and work up the inheritance hierarchy。  


´´´´´´´´´´´´´´´´´´´´´´Page 216´´´´´´´´´´´´´´´´´´´´´´´

194       CH AP T E R   7   *    L E A R N IN G   AB OU T   CO M P O N E N TS   AN D  C L AS S  H I E R AR C H IE S 



          More Type´Casting Details 



          This chapter illustrated some type´casting examples。 In Visual Basic�察�you have two ways to  

          type cast�此�



               o  A forced type cast�察�which can also be used on value types 



               o  A type cast that queries if a type cast is possible 



                Consider this hierarchy�此�



              Class Base  

                  Public Sub Method�┌�  

                      Console。WriteLine�─�Base。Method;�� 

                  End Sub 

              End Class 



              Class Derived  

                  Inherits Base 



                  Public Overloads Sub Method�┌�  

                      Console。WriteLine�─�Derived。Method;�� 

                  End Sub 

              End Class 



                The next step is to instantiate the type Derived and cast the instance to the base type�此�



                      Dim derivedCls As Derived = New Derived�┌� 

                      Dim baseCls As Base = derivedCls 



               When casting from a derived type to a base class type�察�a type cast is not necessary and you  

          can assume it is implied。 

               A type cast is necessary when you want to cast a base class instance to a derived class instance。  

          Following is the source code for a forced type cast�察�assuming the inheritance hierarchy from  

          the previous cast。 



          Dim backToDerived As Derived = DirectCast��baseCls�察�Derived�� 



                The forced cast is the use of the method DirectCase。 The cast is forced because a conver

          sion to the desired type will occur�察�regardless if it is possible or not。 If the cast is not possible�察�a  

          cast exception is thrown。 

               Another way to perform a type cast is to use a query cast�察�as illustrated by the following  

          code�察�again assuming the inheritance hierarchy of this section。 



          Dim backToDerived As Derived = TryCast��baseCls�察�Derived�� 



                In the code�察�the cast involves using the TryCast method。 This cast is a query because a cast  

          will be attempted。 If the cast is successful�察�then an instance of the type is assigned to the vari

          able backToDerived。 If the cast is not possible�察�then backToDerived is assigned a  Nothing value。  

          No exception is thrown。 This casting technique is possible only for reference types。 


´´´´´´´´´´´´´´´´´´´´´´Page 217´´´´´´´´´´´´´´´´´´´´´´´

                            CH AP T E R   7   *    L E AR N IN G   AB O U T   CO M P O N E N TS   AN D   C L AS S  H I E R AR C HI E S 195 



The Important Stuff to Remember 



In this chapter�察�you learned about interfaces and implementations。 Here are the key points  

to remember�此�



     o  Using interfaces is not like using inheritance。 They are two separate designs�察�even though  

        interfaces will use inheritance。 



     o  Interfaces at an abstract level imply ideas of how you would like your application to work。 



     o  Ideas when implemented as interfaces should be general and applicable to multiple  

        application implementations for the domain。 



     o  Ideas are represented using Visual Basic interfaces。 And interfaces are implemented  

        using classes or structures。 But note that interfaces are reference types。  



     o  Factories are used to instantiate implementations and return an instance that imple

        ments an interface。 Using a factory means that the user of an interface does not need to  

        know which type of implementation object is instantiated。 



     o  Interfaces can be considered as facets that might be targeting a specific characteristic of  

        an implementation。 However�察�as illustrated in the previous chapter�察�interfaces do not  

        expose Friend state or the  Friend workings of the implementations。 



     o  ponents are a fundamental way of developing code and should be your primary  

        way of writing code。 For the remainder of this book�察�interfaces will be used whenever  

        possible。 Take notice and try to understand what the idea behind the interface is。 



Some Things for You to Do 



The following are a couple things for you to do to apply what you¨ve learned in this chapter。 



     1。  Implement your own tax system using the predefined base classes。  



*Note  Because of the number of possible tax systems�察�I do not provide an answer for exercise 1。 If you  

want me to review your answer�察�please send it to me at christianhgross@gmail。。 



     2。  Add functionality to the tax engine¨s base classes that implement the behavior of a  

         minimum tax´free amount。 This means if your ine is not above the minimum tax

         free amount�察�you do not pay taxes。 


´´´´´´´´´´´´´´´´´´´´´´Page 218´´´´´´´´´´´´´´´´´´´´´´´


´´´´´´´´´´´´´´´´´´´´´´Page 219´´´´´´´´´´´´´´´´´´´´´´´

C  H  A  P  T  E  R     8 



 * * * 



Learning About ponent

Oriented Architecture 



So far�察�you have learned the essentials of Visual Basic。 With the essentials�察�you can write a  

functional application that uses classes�察�objects�察�interfaces�察�and inheritance。 In this chapter�察 �

you¨ll learn about a Visual Basic programming technique that some developers define as structural。  

A structural programming technique is when the code does not directly serve to solve a business  

problem�察�but solves a problem relating to building the application。  

     Another purpose of this chapter is to give you more experience with developing ponent

oriented code。 In particular�察�you¨ll learn how to develop a kernel。 Developing a kernel demon

strates the power and flexibility of the ponent´oriented development approach。 You can  

build a working system even though you might not know what all of the implementations are  

ahead of time。 This type of development makes it possible to modularize development�察�in that  

individual teams are responsible for certain interfaces。 Then once the pieces have been imple

mented�察�they are fitted together like a jigsaw puzzle。 Of course�察�interfaces and ponents do  

not guarantee success�察�but they do ensure one team does not need to wait for another team to  

finish its code。  

     To demonstrate all of these concepts�察�we¨ll build an application that controls lighting in  

buildings�察�using the kernel programming approach。 



Understanding Kernels 



Imagine you are the owner of a house or mercial building�察�and you want to reduce your  

electricity bill。 One way of doing that is to automate the lighting system of your building so that  

lights are on when they need to be。 What is unique about this system is that you have a controller  

and the devices that are controlled。  

     The controller controls devices that it does not know about ahead of time�察�but fulfills a  

contract。 The lighting system is a controller�察�programmatically called a kernel�察�because the  

rooms that it controls are not known initially。 The rooms are known when the controller is used  

to manage the lighting system。 The kernel programming approach is one where a core of func

tionality is developed。 The core functionality by itself does not work�察�because it relies on other  

pieces to perform certain tasks。 In programming terms�察�this is called developing ponents  

that use interfaces and implementations。  



                                                                                                                 197 


´´´´´´´´´´´´´´´´´´´´´´Page 220´´´´´´´´´´´´´´´´´´´´´´´

198       CH 
卦指朕村 貧匯匈 和匯匈 指欺競何 壘��16�� 家��13��
酔楯荷恬: 梓囚徒貧圭�鮗� ○ 賜 ★ 辛酔堀貧和鍬匈 梓囚徒貧議 Enter 囚辛指欺云慕朕村匈 梓囚徒貧圭�鮗� ● 辛指欺云匈競何!
梁椣戻幣�� 梁心弌傍議揖扮窟燕得胎��傍竃徭失議心隈才凪万弌誌育断蛍�輌臆惨軼僑〃�燕慕得珊辛參資誼持蛍才将刮襲潜��範寔亟圻幹慕得 瓜寡追葎娼得辛參資誼寄楚署衛、持蛍才将刮襲潜填��