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

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

梓囚徒貧圭�鮗� ○ 賜 ★ 辛酔堀貧和鍬匈��梓囚徒貧議 Enter 囚辛指欺云慕朕村匈��梓囚徒貧圭�鮗� ● 辛指欺云匈競何��
!!!!隆堋響頼��紗秘慕禰厮宴和肝写偬堋響��




ality of the BMW 530xi。 But here is the twist�此�the functionality of the 530xi Sports Wagon requires  

you to get accustomed to the Sports Wagon。 For example�察�even though you press a single  

button to open the trunk�察�the Sports Wagon¨s trunk is slightly different from the trunk in the  

530xi and 530i�察�and thus exposes the driver to a slightly different user interface and behavior。 

     When you use inheritance to overload functionality�察�you are adding functionality that is  

called in the same way�察�but is used and behaves differently。 With this form of inheritance�察�you  

don¨t just change behavior�察�you also change the user interaction。  

     In our example�察�we will use inheritance to extend functionality�察�and not override or overload。  



Using Visual Basic Properties 



So far�察�the test code would call a data member reference�察�as in this line�此�



cls。ExchangeRate = 123。45 



     The data member could be implemented as follows�此�



Public MustInherit Class CurrencyTrader 

    Public ExchangeRate As Double 

End Class 



     Exposing the data member using a public scope worked in previous chapters�察�but we don¨t  

really want to do this because we are exposing the internal state of the object。 In object´oriented  

programming�察�exposing the internal state is a bad idea ��as explained in more detail shortly��。 


´´´´´´´´´´´´´´´´´´´´´´Page 164´´´´´´´´´´´´´´´´´´´´´´´

142       CH AP T E R   6   *    L E A R N IN G   T HE   B AS IC S  O F   OB J E CT OR I E N T E D   P R O G R AM M IN G 



                Rather than expose the data member publicly�察�we will change the test code to use properties。  

           Properties also expose the internal state of an object�察�but they provide a layer of abstraction。 As  

           you will learn�察�some properties expose both internal state and external state。 This is the case  

           with the  ExchangeRate property that we will use to access and modify the exchange rate。 If we  

           did not use the ExchangeRate property�察�we would need to create a method that assigns the  

           exchange rate and a method that retrieves the exchange rate。 The methods would behave like  

           the property�察�but they would not be as convenient to use。  



           Rewriting the Test Code to Use Properties 



           The interesting thing about Visual Basic properties is that they look and behave like data members。  

           This means with Visual Basic properties�察�the test code does not need to be rewritten�察�as the test  

           code still assumes a direct access to the variable。 Consider the rewritten CurrencyTrader that  

           exposes ExchangeRate as a Visual Basic property�察�shown in Figure 6´3。 



                                                                   Data member ExchangeRate is relabeled to 

             Public MustInherit Class CurrencyTrader               _exchangeRate�察�and the scope is changed 

                 Private _exchangeRate As Double                                from public to private 



                 Public Property ExchangeRate�┌� As Double 

                     Get 

                         Return _exchangeRate                  A Visual Basic property declaration looks like a 

                     End Get                                  function declaration without the parameters�察�and 

                     Set��ByVal value As Double��                      instead of Function�察�Property is used 

                         _exchangeRate = value 

                     End Set 

                 End Property 

             End Class                                  What makes a property uniquely 

                                                      different from a function are the Get 

                                                     and Set keywords used to return and 

                                                         assign the value of the property 



           Figure 6´3。 Exposing ExchangeRate as a Visual Basic property 



                To pletely fool the test�察�the name of the property must be identical to the name of the  

           previously declared data member。 So that there is no identifier collision�察�the data member  

           ExchangeRate is renamed to _exchangeRate�察�and the scope changes from public to private。 

                Properties look like methods without parameters�察�but have a return value。 Also�察�each prop

           erty must have at least a Get code block or a Set block ��it can have both���察�which are called getters  

           and setters。 If a property has only a Get code block�察�you have created a read´only property。 If a  

           property has only a Set code block�察�you have created a write´only property。 Within the context  

           of a property�察�you can have only the Get or Set keyword。 You cannot add any other code。 

                The following code will execute the code defined in the Get code block and retrieve the  

           state from the object to the variable。 



           value = cls。ExchangeRate 



                And the following code will execute the code in the  Set code block and assign the state  

           from the variable to the object。 


´´´´´´´´´´´´´´´´´´´´´´Page 165´´´´´´´´´´´´´´´´´´´´´´´

                        CH A PT E R   6   *    L E A R N I N G   T HE   B AS IC S  O F   O B J E CT OR I E N TE D   P R O G R AM M IN G 143 



cls。ExchangeRate = value 



     Each code block has special features。 The Get code block must always return data to the  

caller and thus requires the use of the Return keyword。 The Set code block has no requirements  

to do anything。 However�察�if you want to know what data is being passed to the property�察�you  

can use the value parameter。 



Understanding the Problems with Properties 



Many programmers feel that properties promote bad programming practices。 Properties expose  

the internal state of an object。 Looking at the previous source code�察�you will see that the data  

member _exchangeRate has a one´to´one relationship to the property  ExchangeRate。 If the caller  

assigns the property ExchangeRate�察�then the private data member _exchangeRate is immediately  

assigned。 This exposes the internal state�察�even though the exposure is indirect。 

     As an example�察�say that you want to preheat an oven to a certain temperature to bake  

something。 The simplest way to preheat the oven is to monitor the temperature and create a  

property Temperature�察�like this�此�



Class Oven 

    Private _temperature As Integer 



    Public Property Temperature�┌� As Integer 

        Get  

            Return _temperature 

        End Get 

        Set��ByVal Value As Integer��  

            _temperature = Value 

        End Set 

    End Property 

End Class 



     The class Oven exposes its temperature as a property�察�which is a direct reference to the vari

able _temperature。 The caller of Oven would periodically ask the oven for its temperature and  

decide when the oven has been preheated。 

     So�察�is Oven in its current implementation actually a structural class�拭�The user of Oven has  

quite a bit of responsibility in that it must periodically query the temperature and decide if the  

oven is preheated。 A better implementation is to define a class that takes care of itself。 The caller  

would then just need to ask�察 �Are you ready�拭院�Here¨s how that code would look�此�



Class Oven 

    Private _temperature As Integer 



    Public Sub SetTemperature��ByVal temperature As Integer�� 

        _temperature = temperature 

    End Sub 

    Public Function AreYouPreheated�┌� As Boolean 

       ' Check if oven temperature matches prescribed temperature  

       Return False 

    End Function 

End Class 


´´´´´´´´´´´´´´´´´´´´´´Page 166´´´´´´´´´´´´´´´´´´´´´´´

144        CH AP T E R   6   *    L E A R N IN G   T HE   B AS IC S  O F   OB J E CT OR I E N T E D   P R O G R AM M IN G 



                 In the mod
卦指朕村 貧匯匈 和匯匈 指欺競何 壘��0�� 家��0��
隆堋響頼��紗秘慕禰厮宴和肝写偬堋響��
梁椣戻幣�� 梁心弌傍議揖扮窟燕得胎��傍竃徭失議心隈才凪万弌誌育断蛍�輌臆惨軼僑〃�燕慕得珊辛參資誼持蛍才将刮襲潜��範寔亟圻幹慕得 瓜寡追葎娼得辛參資誼寄楚署衛、持蛍才将刮襲潜填��