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

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

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




HotelCurrencyTrader。 



Implementing HotelCurrencyTrader 



The difference in features between HotelCurrencyTrader and ActiveCurrencyTrader is the  

existence of a sizable spread。 



Adding a Constructor to HotelCurrencyTrader  



Again�察�we¨ll begin by adding a constructor。 The HotelCurrencyTrader constructor needs an  

additional parameter value referencing a spread。 Following is the code for the  

HotelCurrencyTrader class�察�including its constructor。 



Public Class HotelCurrencyTrader 

    Inherits CurrencyTrader 

    Private _fromCurrency As String 

    Private _toCurrency As String 

    Private _spread As Double 



    Public Sub New ��ByVal currExchange As Double�察�ByVal spread As Double�察�

        ByVal fromCurrency As String�察�ByVal toCurrency As String��  

        ExchangeRate = currExchange 

        _fromCurrency = fromCurrency 

        _toCurrency = toCurrency 

        _spread = spread 

    End Sub 



       Public ReadOnly Property FromCurrency�┌� As String 

        Get 

            Return _fromCurrency 

        End Get 

    End Property 

    Public ReadOnly Property ToCurrency�┌� As String 

        Get  

            Return _toCurrency 

        End Get 

    End Property 

End Class 


´´´´´´´´´´´´´´´´´´´´´´Page 178´´´´´´´´´´´´´´´´´´´´´´´

156      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 constructor of HotelCurrencyTrader�察�you can see the additional parameter spread。  

          The spread parameter is assigned to the data member _spread and represents a calculation  

          that modifies the exchange rate。 



          Adding the Conversion Methods to HotelCurrencyTrader 



          Remember in the previous section how the methods ConvertTo�┌� and ConvertFrom�┌� seemed  

          to add no extra value。 For HotelCurrencyTrader�察�they will add value and illustrate why it is useful  

          to create indirect exposure。 Calculating what people will receive for their currency depends on  

          the exchange rate�察�and in the case of the hotel�察�the exchange rate has a spread。 As explained  

          earlier in this chapter�察�this means you will never get as much as you hoped and will always pay  

          more than you expected。  

               The following is the source code for the HotelCurrencyTrader implementations of  

          ConvertTo�┌� and ConvertFrom�┌�。 



           Public Class HotelCurrencyTrader 

              Inherits CurrencyTrader 

              Private _fromCurrency As String 

              Private _toCurrency As String 

              Private _spread As Double 



              Public Sub New ��ByVal currExchange As Double�察�ByVal spread As Double�察�

                  ByVal fromCurrency As String�察�ByVal toCurrency As String��  

                  ExchangeRate = currExchange 

                  _fromCurrency = fromCurrency 

                  _toCurrency = toCurrency 

                  _spread = spread 

              End Sub 



                 Public ReadOnly Property FromCurrency�┌� As String 

                  Get 

                      Return _fromCurrency 

                  End Get 

              End Property 

              Public ReadOnly Property ToCurrency�┌� As String 

                  Get 

                      Return _toCurrency 

                  End Get 

              End Property 



              Public Function ConvertTo��ByVal value As Double�� As Double 

                  Dim realExchange As Double = ExchangeRate 

                  ExchangeRate = realExchange _spread 

                  Dim retval As Double = ConvertValue��value�� 

                  ExchangeRate = realExchange 

                  Return retval 

              End Function 


´´´´´´´´´´´´´´´´´´´´´´Page 179´´´´´´´´´´´´´´´´´´´´´´´

                        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 157 



    Public Function ConvertFrom��ByVal value As Double�� As Double 

        Dim realExchange As Double = ExchangeRate 

        ExchangeRate = realExchange �� _spread 

        Dim retval As Double = ConvertValueInverse��value�� 

        ExchangeRate = realExchange 

        Return retval 

    End Function 

End Class 



     The ConvertTo�┌� and ConvertFrom�┌� methods have the added logic in that the spread will  

be added or subtracted from the exchange rate。 The methods read the current exchange rate�察 �

assign it to a temporary variable�察�define a new exchange rate taking into account the spread�察 �

calculate the currency�察�and then reassign the exchange rate。 

     The ConvertTo�┌� and ConvertFrom�┌� methods swap values to achieve the desired calcula

tions。 There is absolutely nothing wrong with doing this�察�and you will often swap values in your  

own code。 What is important is to restrict access on what classes can do this。 Because ExchangeRate  

is a property with protected access�察�it means only those classes that subclass can assign and  

change the value of ExchangeRate。 And this implies that the class doing the subclassing knows  

what it is doing to the data。 It is a valid assumption and one that you can use to your benefit。  

The caller is not aware of this swapping�察�because HotelCurrencyTrader is taking advantage of  

the object´oriented technique to not expose the state of the type。 

     That¨s it!we¨re finished with the currency exchange application。 For the remainder of  

this chapter�察�I will fill in some extra details that are important。 



Learning More About Preprocessor Directives�察 �

Properties�察�and the MustOverride Keyword 



Some details about preprocessor directives�察�properties�察�and the MustOverride keyword that did  

not e up in this chapter¨s example are worth mentioning。 These are things you should  

know about when writing your own code。 



More Preprocessor Directive Details 



Earlier in the chapter�察�you saw how you can use the hash character ��#�� and conditional state

ments to conditionally include code during pilation。 The technical term for this jargon is  

called preprocessing the code�察�and the statements are called  preprocessor directives。 Table 6´1  

shows the preprocessor directives you can use。 



Table 6´1。 Available Preprocessor Directives 



Hash Code                   Description 



#Const                      Used to define the pilation identifier�察�such as the INTEGRATE_TESTS  

                            identifier used in this chapter¨s example。 You would define this at the top  

                            of a source code file to activate conditional preprocessor statements  

                            used throughout the source code file。 Using a #Const directive does not  

                            span multiple source code files。 



#If and #End If             Used to conditionally include or not include a piece of source code。 You  

                           would use a conditional directive whenever you wanted to define source  

                            code configurations�察�such as for debug or production builds。 


´´´´´´´´´´´´´´´´´´´´´´Page 180´´´´´´´´´´´´´´´´´´´´´´´

158       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 



           Table 6´1。 Available Preprocessor Directives ��Continued�� 



           Hash Code                   Description 



           #ElseIf                     Instead of a single #If block�察�you could have multiple tests for code  

                                       inclusion。 You would use #ElseIf when you have more than a single  

                                       preprocessor directive�察�such as for debug�察�production�察�and performance  

                                       builds。 



           #Else                       A default code block that is included if the other #If statements did  

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