Article ID: 935218 - Last Review: October 4, 2007 - Revision: 2.8 MCTS Self-Paced Training Kit (Exam 70-536): Microsoft® .NET Framework 2.0—Application Development Foundation Comments and Corrections Part 2On This PageSUMMARY
This article contains comments, corrections, and information about known errors relating to the Microsoft Press book MCTS Self-Paced Training Kit (Exam 70-536): Microsoft® .NET Framework 2.0—Application Development Foundation, 0-7356-2277-9. Additional corrections for this book are available in article 923018
(http://support.microsoft.com/kb/923018/)
, 949730
(http://support.microsoft.com/kb/949730/)
, and 949734
(http://support.microsoft.com/kb/949734/)
. The following topics are covered:
MORE INFORMATIONPage 200: Answer B to question 2 is impreciseOn page 200, answer B reads:"To test whether two objects are the same reference of an object" It should read: "To test whether two variables are referencing the same object" Page 204: Description of code sample is incorrectOn page 204, the last sentence before the first code sample reads:"Once you have an instance of the class, you use the Push method to add items to the queue and the Dequeue method to remove items from the list, as shown in this short example:" It should read: "Once you have an instance of the class, you use the Push method to add items to the stack and the Pop method to remove items from the stack, as shown in this short example:" Page 209: DictionaryEntry referred to as DictionaryEntriesOn page 209, the fourth bullet point reads:"Enumerate dictionaries and know how to use DictionaryEntries." It should read: "Enumerate dictionaries and know how to use DictionaryEntry." Page 210: Brackets used incorrectly in VB code exampleOn page 210, the VB code example under the second paragraph reads:It should read: Page 213: Incorrect method used for supporting classOn page 213, in the fourth sentence of the first paragraph under "Understanding Equality" reads:"This class supports the GetHash method, which returns an integer that uniquely identifies the object." It should read: "This class supports the GetHashCode method, which returns an integer that uniquely identifies the object." Page 213: Values property referred to as the Value propertyOn page 213, the last sentence reads:"You also could iterate over those values by iterating through the Value property instead, as seen in this example:" It should read: "You also could iterate over those values by iterating through the Values property instead, as seen in this example:" Page 214: Code example missing commentOn page 214, in the second VB code example the 6th line of code is missing a comment.Change: To: Page 215: Code example contains a syntax errorOn page 215, Line 2 of the second VB code example contains a syntax error.Change: To: Page 216: Incorrect description of Hashtable functionalityOn page 216, the second sentence on the page reads:"This situation is where the Hashtable’s ability to provide a class that calculates equality comes in." It should read: "This situation is where the Hashtable’s ability to use a class that calculates equality comes in." Page 216: Interfaces referred to as classesOn page 216, the first two sentences of the second paragraph read:"The Hashtable class supports a constructor that can accept an instance of the IEqualityComparer class as an argument. Much like the IComparer class shown in Lesson 1 that allowed you to sort collections, the IEqualityComparer interface supports two methods: GetHashCode and Equals." They should read: "The Hashtable class supports a constructor that can accept an instance of the IEqualityComparer interface as an argument. Much like the IComparer interface shown in Lesson 1 that allowed you to sort collections, the IEqualityComparer interface supports two methods: GetHashCode and Equals." Page 227: Incorrect VB code used in BitArray exampleOn page 227, the second part of the VB code in Step 4 reads:It should read: Page 228: Incorrect C# code used in BitArray exampleOn page 228: the C# code sample at the top of the page reads:It should read: Page 228: Four bits referenced in place of three bitsOn page 228, the second sentence of the third paragraph of the How to Use a BitVector32 for Bit Masks section reads:"Assume that you need to set the value of the first four bits in some 32-bit integer." It should read: "Assume that you need to set the value of the first three bits in some 32-bit integer." The first sentence of step 4 of the section reads: "Repeat steps 1 through 3 until you have four bit masks." It should read: "Repeat steps 1 through 3 until you have three bit masks." Page 230: Bits referred to as bytesOn page 230, the eighth sentence of the second paragraph in the Understanding Binary Math section reads:"So if an unsigned byte has all 8 bytes filled in, it can be represented by this equation: 1 + 2 + 4 + 8 + 16 + 32 + 64 + 128 = 255." It should read: "So if an unsigned byte has all 8 bits filled in, it can be represented by this equation: 1 + 2 + 4 + 8 + 16 + 32 + 64 + 128 = 255." Page 230: Unsigned should be signedOn page 230, the fourth sentence of the last paragraph in the Understanding Binary Math section refers to an unsigned integer, rather than a signed integer.Change: "Complicating matters even more is the fact that the BitVector32 actually works with an unsigned integer, so the last digit is actually –(2^31), which deals with the negative range of a signed 32-bit integer." To: "Complicating matters even more is the fact that the BitVector32 actually works with a signed integer, so the last digit is actually –(2^31), which deals with the negative range of a signed 32-bit integer." Page 232: 98314 should be 196634 and 00000000000000011000000000001010 should be 00000000000000110000000000011010On page 232, the value of the BitVector32 variable is incorrect.Change: " You could do the math to figure out that the number 98314 can store 10, 1, and 192, but the BitVector32 can do it for you with much less work." To: " You could do the math to figure out that the number 196634 can store 10, 1, and 192, but the BitVector32 can do it for you with much less work." Page 234: CollectionsUtil referred to as CollectionUtilOn page 234, the third sentence of the Case-Insensitive Collections section reads:"Because this is such a common use, the .NET Framework has a CollectionUtil class that supports creating Hashtable and SortedList objects that are case insensitive." It should read: "Because this is such a common use, the .NET Framework has a CollectionsUtil class that supports creating Hashtable and SortedList objects that are case insensitive." Page 235: CollectionsUtil referred to as CollectionUtilOn page 235, the sixth sentence of the second paragraph reads:"Unlike case-insensitive collections, CollectionUtil methods cannot be used to create your collections." It should read: "Unlike case-insensitive collections, CollectionsUtil methods cannot be used to create your collections." Page 235: Incorrect string used in VB and C# code sampleOn page 235, in the VB and C# code sample it reads:It should read: Page 237: "++x" should be "x++"On page 237, the fifth line of the last C# code sample is incorrect.Change: To: Page 238: Incorrect usage of ListCollection class name in Step 3On page 238, Step 3 reads:"In the Main method of the project, create a new instance of the ListCollection class, specifying case insensitive and culture invariant." It should read: "In the Main method of the project, create a new instance of the ListDictionary class, specifying case insensitive and culture invariant." Page 239: CollectionsUtil referred to as CollectionUtilOn page 239, the third bullet point reads:"You can create case-insensitive versions of Hashtable and SortedList objects using the CollectionUtil class." It should read: "You can create case-insensitive versions of Hashtable and SortedList objects using the CollectionsUtil class." Page 246: KeyValuePair referred to as NameValuePairOn page 246, the last entry on the page in Table 4-20 reads:"DictionaryEntry NameValuePair<>" It should read: "DictionaryEntry KeyValuePair<>" Page 249: Class referred to as objectOn page 249, the sentence after the first code sample reads:"This approach is a lot easier than writing a whole Comparison object for seldom-used comparisons." It should read: "This approach is a lot easier than writing a whole Comparison class for seldom-used comparisons." Page 249: ReverseIntComparison should be AddressOf ReverseIntComparisonOn page 249, the first VB code sample is incorrect.Change: To: Page 250: Dictionary referred to as a QueueOn page 250, the fourth sentence of the Generic Dictionary Class section reads:"To use a generic Queue type, you can follow these steps:" It should read: "To use a generic Dictionary type, you can follow these steps:" Page 250: First line of VB code example incorrectOn page 250, the first line of the VB code example reads:It should read: Page 254: KeyValuePair referred to as NameValuePairOn page 254, the second sentence of the paragraph following Table 4-23 reads:"This behavior is unlike the generic Dictionary type, where the enumerator returns a generic NameValuePair object." It should read: "This behavior is unlike the generic Dictionary type, where the enumerator returns a generic KeyValuePair object." Page 258: ReadOnlyCollectionBase class referred to as ReadOnlyCollection baseOn page 258, the first sentence of the fifth paragraph in the Writing Your Own Collections section reads:"Unlike the CollectionBase and ReadOnlyCollection base classes, the DictionaryBase implements the IDictionary, IEnumerable, and ICollection interfaces." It should read: "Unlike the CollectionBase and ReadOnlyCollectionBase classes, the DictionaryBase implements the IDictionary, IEnumerable, and ICollection interfaces." Page 259: The term "state abbreviations" used in place of "calling codes"On page 259, the first sentence in Exercise 1 reads:"In this exercise, you create a generic Dictionary to hold state abbreviations with their full names." It should read: "In this exercise, you create a generic Dictionary to hold calling codes with their full names." Pages 280, 281: "XML" used in place of "SOAP"On pages 280 and 281, the title of Table 5-1 reads:"XML Serialization Attributes" It should read: "SOAP Serialization Attributes" Page 286: SoapFormatter missingOn page 286, answer A to Question 1 omits a reference to SoapFormatter.Change: "A. An instance of BinaryFormatter" To: "A. An instance of BinaryFormatter or SoapFormatter" Page 287: serialized used in place of deserializedOn page 287, Question 4 reads:"Which of the following interfaces should you implement to enable you to run a method after an instance of your class is serialized?" It should read: "Which of the following interfaces should you implement to enable you to run a method after an instance of your class is deserialized?" Page 292: Missing quantity line in sample codeOn page 292, the sample code for serializing a class in the middle of the page reads:It should read: Page 301: XML should be XmlOn page 301, six review question answers use XML rather than Xml.In the answers to question 2, change: "B. XMLType C. XMLElement D. XMLAttribute" To: "B. XmlType C. XmlElement D. XmlAttribute" In the answers to question 4, change: "A. XMLType B. XMLIgnore C. XMLElement D. XMLAttribute" To: "A. XmlType B. XmlIgnore C. XmlElement D. XmlAttribute" Page 305: OnDeserialized should be OnDeserializingOn page 305, the last sentence references OnDeserialized instead of OnDeserializing.Change: "Apply the OnDeserialized attribute to the method that should run during this event." To: "Apply the OnDeserializing attribute to the method that should run during this event." Page 306: OnDeserializing should be OnDeserializedOn page 306, the last sentence of the Deserialized section references OnDeserializing rather than OnDeserialized.Change: "Apply the OnDeserializing attribute to the method that should run during this event." To: "Apply the OnDeserialized attribute to the method that should run during this event." Page 343: Image.FromFile shoudl be New BitmapOn page 343, the second VB code sample uses Image.FromFile rather than New Bitmap.Change: "Dim B As Bitmap = Image.FromFile("C:\windows\gone fishing.bmp")" To: "Dim B As Bitmap = New Bitmap("C:\windows\gone fishing.bmp")" Page 370: ThreadState.WaitJoinSleep referenced in place of ThreadState.WaitSleepJoinOn page 370, the description of Interrupt in Table 7-2 reads:"Raises a ThreadInterruptedException when a thread is in a blocked state (ThreadState.WaitJoinSleep). If the thread never blocks, the interruption never happens." It should read: "Raises a ThreadInterruptedException when a thread is in a blocked state (ThreadState.WaitSleepJoin). If the thread never blocks, the interruption never happens." Page 373: Thread referenced in place of valueOn page 373, the last sentence of the first paragraph reads:"Later on, we will use this thread to see what work is being done on which thread." It should read: "Later on, we will use this value to see what work is being done on which thread." Page 373: Correction in method name and output phraseOn page 373, the first and second sentence of the paragraph below the first set of code examples reads:"When the Start method is called, the SomeWork method is called on a new thread and the thread executes until the method completes. In this example, our SimpleWork method writes the phrase "In Thread" and shows the ManagedThreadId Property." It should read: "When the Start method is called, the SimpleWork method is called on a new thread and the thread executes until the method completes. In this example, our SimpleWork method writes the phrase "Thread #" and shows the ManagedThreadId Property." Page 377: ThreadStart delegate referenced as StartThreadOn page 377, the first three sentences of the Passing Data to Threads section read:"In each of the earlier examples, we were using the StartThread delegate, which takes no parameters. In most real-world use of threading, you will need to pass information to individual threads. To do this, you need to use a new delegate called ParameterizedStartThread." They should read: "In each of the earlier examples, we were using the ThreadStart delegate, which takes no parameters. In most real-world use of threading, you will need to pass information to individual threads. To do this, you need to use a new delegate called ParameterizedThreadStart." Page 378: Missing line break in code sampleOn page 378, the first line of the code sample reads:It should read: Page 378: Incorrect code in C# code sample statementOn page 378, the C# code sample reads:It should read: Page 380: Domain referenced in place of stateOn page 380, the first sentence on the page reads:"To solve the problem of leaving objects or the AppDomain in an inconsistent domain, the Thread class has two important static methods: BeginCriticalRegion and EndCriticalRegion." It should read: "To solve the problem of leaving objects or the AppDomain in an inconsistent state, the Thread class has two important static methods: BeginCriticalRegion and EndCriticalRegion." Page 383: Include statement referenced in place of using statementOn page 383, step 3 reads:"In the new class, add an include statement (or the Imports statement for Visual Basic) to the System.Threading namespace." It should read: "In the new class, add a using statement (or the Imports statement for Visual Basic) to the System.Threading namespace." Page 383: StartThread referenced in place of ThreadStartOn page 383, step 7 reads:"Go back to the Main method, and create a new StartThread delegate that points to the Counting method." It should read: "Go back to the Main method, and create a new ThreadStart delegate that points to the Counting method." Page 387: Interlock class referenced in place of Interlocked classOn page 387, the first bullet point reads:"Use the Interlock class to perform atomic operations." It should read: "Use the Interlocked class to perform atomic operations." Page 389: Reading from memory referred to as reading into memoryOn page 389, the second sentence of the paragraph preceeding Figure 7-2 reads:"As shown in Figure 7-2, two threads could each read the values into memory and update them with the same updated value." It should read: "As shown in Figure 7-2, two threads could each read the values from memory and at the same time update them with the same updated value." Page 390: AddCount method referenced in place of UpdateCount methodOn page 390, the first sentence after Table 7-7 reads:"We can change our AddCount method to use the Interlocked class to solve the threading issue like so:" It should read: "We can change our UpdateCount method to use the Interlocked class to solve the threading issue like so:" Page 394: C# code sample is incorrectOn page 394, the C# code sample incorrectly locks on a public instance where it should be private, it also uses an incorrect operator in the _evenCount variable.Change: To: Page 396: Thread.Sleep method required in code exampleOn page 396, the C# code example is missing the Thread.Sleep method.Change: To: Page 397: AddressOf missing from code sampleOn page 397, the third and fourth lines of the Visual Basic code sample are incorrect.Change: To: Page 407: EventWaitHandles referenced in place of EventWaitHandleOn page 407, the third sentence of the final paragraph reads:"When creating or opening a named event, you will need to deal with EventWaitHandles instead of the AutoResetEvent and ManualResetEvent classes." It should read: "When creating or opening a named event, you will need to deal with EventWaitHandle instead of the AutoResetEvent and ManualResetEvent classes." Page 410: Interlock class referenced in place of Interlocked classOn page 410, the first bullet point reads:"To perform atomic math operations, use the Interlock class." It should read: "To perform atomic math operations, use the Interlocked class." Page 414: Bytes written referenced in place of bytes readOn page 414, the first sentence of the first paragraph reads:"The differences include that it returns an IAsyncResult instead of the number of bytes written and that two parameters are added to the method signature to support APM." It should read: "The differences include that it returns an IAsyncResult instead of the number of bytes read and that two parameters are added to the method signature to support APM." The first sentence following the second code sample reads: "At the end of the operation, you will call the EndRead with the IAsyncResult object and it will return the bytes written." It should read: "At the end of the operation, you will call the EndRead with the IAsyncResult object and it will return the bytes read." Page 415: strm.Read method not requiredOn page 415, the first line in the C# code sample under the "// Make the asynchronous call" comment is not required.Remove the following line of code: Page 417: AddressOf missing from code sampleOn page 417, the 10th line in the VB code example is missing AddressOf.Change: To: Page 419: Event referenced in place of classOn page 419, the third sentence in the Windows Forms Application Exception Handling box reads:"You do this by registering for the ThreadException event on the Application event." It should read: "You do this by registering for the ThreadException event on the Application class." Page 421: QueueWorkItem referenced in place of QueueUserWorkItemOn page 421, the first sentence on the page reads:"Instead of creating a new thread and controlling it, we can use the ThreadPool to do this work by using its QueueWorkItem method:" It should read: "Instead of creating a new thread and controlling it, we can use the ThreadPool to do this work by using its QueueUserWorkItem method:" Page 421: Extra closing parenthesis included in code sampleOn page 421, the second code sample reads:It should read: Page 424: RegisterWaitHandle referenced in place of RegisterWaitForSingleObjectOn page 424, the third sentence of the ThreadPool and WaitHandle section reads:"This is done by calling the ThreadPool.RegisterWaitHandle, as shown in the following example:" It should read: "This is done by calling the ThreadPool.RegisterWaitForSingleObject, as shown in the following example:" Page 429: Thread execution behavior misrepresentedOn page 429, the last sentence of step 8 reads:"Note that some of the work items are executed on different threads." It should read: "Note that some of the work items may be executed on different threads." Page 432: Case scenario topics misrepresentedOn page 432, the first sentence of the Case Scenario section reads:"In the following case scenarios, you will apply what you’ve learned about how to use application domains and services." It should read: "In the following case scenarios, you will apply what you’ve learned about the topics of this chapter." Page 438: Explanation of ASP.NET worker process incorrectOn page 438, the second sentence in the first paragraph contains inconsistencies with ASP.NET.Change: "If 10 people visit an ASP.NET Web site simultaneously, ASP.NET will create a separate application domain for each user." To: "In one ASP.NET worker process there will be one application domain per web site. Users of the same web site will all run in the context of the same application domain." Page 454: VB and C# code samples contain an unnecessary line of codeOn page 454, in Step 3 the 2nd line of the VB and C# code is redundant and should be removed.Remove from VB code: Remove from C# code: Page 456: Answer D of Question 3 partially incorrectOn page 456, Answer D of Question 3 reads:"Create an instance of the AppDomainSetup class, and then set the Application-Base property. Pass the AppDomainSetup object to the AppDomain constructor." It should read: "Create an instance of the AppDomainSetup class, and then set the Application-Base property." Pages 481-482: Incorrect title on TableOn pages 481 and 482 the title of Table 9-1 reads:"ConfigurationManager Properties and Methods" It should read: "Configuration Properties and Methods" Page 483: Configuration should be ConfigurationManagerOn page 483, the title of Table 9-2 is incorrect.Change: "Table 9-2 Configuration Properties and Methods" To: "Table 9-2 ConfigurationManager Properties and Methods" Page 490: Incorrect code sampleOn page 490, thecode samples are incorrect.Change: To: Microsoft Press is committed to providing informative and accurate books. All comments and corrections listed above are ready for inclusion in future printings of this book. If you have a later printing of this book, it may already contain most or all of the above corrections. | Article Translations
|

Back to the top
