小牛电子书 > 其他电子书 > VB2008从入门到精通(PDF格式英文版) >

第19章

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

小说: VB2008从入门到精通(PDF格式英文版) 字数: 每页3500字

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




           problem that we encountered when adding 2 billion and 2 billion。 


…………………………………………………………Page 63……………………………………………………………

                                     CH A PT E R   2   ■    L E A R N I N G   A B OU T   。 N E T  N U M B E R   AN D   V A L U E   T Y P E S  41 



Figure 2…13。 How a puter counts to 7 



      The bad part of an odometer is that you don’t know when the odometer has been wrapped  

around。 You could end up with a car whose odometer read 100;000 miles/kilometers; but actu

ally had driven 1。1 million。 Fortunately;  knows when the number type has been wrapped  

around。 The technical jargon for this situation is overflow or  underflow。 Overflow is when the  

odometer wraps over in the positive direction (900;000 to 1。1 million); and underflow is when  

the odometer wraps around in the negative direction (0 to –100;000)。 Detection of either situa

tion is activated as a project property。 Follow these steps to deactivate overflow/underflow  

detection for the Calculator class library: 



      1。 Right…click the Calculator project in the Calculator solution and select Properties。 



      2。 Click pile; and then click Advanced pile Options。 



      3。 Check “Remove integer overflow tests” to remove the test for overflow situations。 



      4。 Click OK to finish。 



      Rerun the test console application; and you will get an exception indicating that an over

flow has occurred。 



Error found(…294967296) should have been (4000000000) 



      Having an overflow situation is a problem; and the fact that  can catch it is a good  

thing。 But at the end of the day; our preferred solution is to be able to add 2 billion plus 2 billion。  

After all; Bill Gates would probably prefer having 4 billion in his bank account instead of the  

calculated minus value or an error indicating that the bank cannot accept his 4 billion。 


…………………………………………………………Page 64……………………………………………………………

42        CH AP T E R   2   ■    L E A R N IN G   AB OU T   。 N E T  N U M B E R   A N D   V A L U E   T Y P E S  



           Understanding Numeric and Value Data Types 



          A  data type is a way of describing a piece of data using a metadescription。 For example; if you  

           have a Double type; you know you will have a double number。 Many data types are available:  

           Integer; Long; Short; Single; Double; String; Enum; Structure; and so on。 You can even define your  

           own data types。 Data types are the heart of the CLR and a type…safe programming environment。  



           Understanding Value and Reference Types 



           The CLR supports two ways of representing data: value and reference。 The major difference  

           between a value and reference type is how the information associated with the type is stored。  

           The problem with value and reference types is that they are a technical invention and can be  

           confusing。  

                When the CLR runs an application; a thread is executing the mon Language Infra

           structure (CLI)。 Think of a thread as you wandering around a mall buying things。 You are an  

           individual and can buy things independently of other people。 The store will have many people  

           looking around and buying different things。 Likewise; a puter has many threads doing  

           many different independent things。 When you look around in a store; you might bump into  

           people and cause them to drop things。 While the CLR tries to avoid such problems; if you try  

           hard enough in your code; you can cause other threads to “drop” things。 

                When it executes; a thread has a local memory pool called a stack; which is akin to you  

           carrying a wallet that contains cash and credit cards。 You carry the wallet with you from store  

           to store; like a thread carries a stack when calling one method to another。 When you enter the  

           store and want to purchase something; you have two major ways of paying for the item: with  

           cash or by using a credit/debit card。 However; with a credit/debit card; you can’t pay immedi

           ately。 You need a machine that calls a server to verify that your piece of plastic has enough money  

           to pay for the item。 Paying with cash is much faster than paying with a credit card; because you  

           don’t need to talk to a remote puter。 

                Now suppose you and your spouse want to pay for the item。 You could use the same credit  

           card account; but you have unique credit cards。 But you cannot do the same thing with cash。  

           If you have a 10 bill; your spouse cannot share the 10 with you。 Your spouse would need a  

           second 10 bill; and together you would have 20。 

                The cash and credit card payment methods are analogous to value and reference types。  

           Cash is a value type; and the credit card is a reference type。 When the CLR executes; the code  

           dragged from one method call to another method call is the stack that contains a number of  

           value type variables。 Value types are stored directly on the stack like cash。 Reference types are  

           stored as pointers to memory on the stack; just like a credit/debit card points to cash some

           where else。 The reference pointer points to a piece of memory called the  heap。 These concepts  

           are illustrated in Figure 2…14。 

                With value types; when one value type is assigned to another; the contents are copied。 If  

          you modify one of the copies; the original will not be altered。 In contrast; when you change the  

           value of a reference type; the values of all the pointers to that reference type change。 Going  

           back to the credit card and cash example; if you have 10 and so does your spouse; then when  

          you spend 8; it does not affect the 10 that your spouse has; as befits the value type model。  

           However; if you and your spouse have 10 available with your credit card and you spend 8;  

           only 2 remain; as you would expect with a reference type。 


…………………………………………………………Page 65……………………………………………………………

                                  CH A PT E R   2   ■    L E A R N I N G   A B OU T   。 N E T  N U M B E R   AN D   V A L U E   T Y P E S  43 



                                                             The variable total is a value type 

                                                                 and stored on the stack 



   

  

                                                                                        Stack 

                                                                             1:total = 3 

     
   

           ! 〃 



    #  % & ' 

   
  ()*   〃   + &* 

    ; # 

    ;                            Method call 



                                                   Stack 

       

                                                   empty 

                                                There are no parameters 

   
  … 。/                                               and no local variables; 

    ;                                                             thus the stack is empty 



                                   Each called function has a stack 

   ;   

                                      that contains the function 

                                  arguments and variables declared 

                                            in the function 



Figure 2…14。 Stacks that are created and the interaction with the heap during CLR execution 



     There are times when you use value types and times when y

返回目录 上一页 下一页 回到顶部 2 2

你可能喜欢的