Applied Microsoft® .NET Framework Programming

Errata for Applied Microsoft® .NET Framework Programming




The errata list is a list of errors and their corrections that were found after the product was released. If the error was corrected in a later version or reprint the date of the correction will be displayed in the column titled "Date Corrected".

The following errata were submitted by our customers and approved as valid errors by the author or editor.

Color Key: Serious Technical Mistake Minor Technical Mistake Language or formatting error Typo Question Note Update



Version Location Description Submitted By Date Submitted Date Corrected
Printed
Page xxxi

Invalid URL There is an invalid URL listed in the last sentence in the first paragraph of the 'System Requirements' section on page xxxi. Change: "You can download it from

Microsoft Press  Jul 13, 2010 
Printed
Page xxviii

Incorrect "And" In Lead-In In the lead-in line (in boldface) of the second entry on the page, remove the "and".Change:"Automatic memory and management (garbage collection)"To:"Automatic memory management (garbage collection)"

Microsoft Press  May 06, 2010 
Printed
Page http

//go.microsoft.com/fwlink/?LinkId=5584." To: "You can download it from http://msdn2.microsoft.com/en-us/netframework/aa731542.aspx"

Microsoft Press  May 06, 2010 
Printed
Page 10

MSCorLib.dll Should Be MSCorEE.dll in Diagram 1-3 On page 10, in figure 1-3, an incorrect DLL is referenced. Change the box currently reading: "DLL:MSCorLib.dll Function:_CorExeMain" To: "DLL:MSCorEE.dll Function:_CorExeMain"

Microsoft Press  Jul 13, 2010 
Printed
Page 11

Standard Edition Should Be Second Edition On page 11, in the first sentence of the third paragraph, Change: "[...] Windows 98 Standard Edition [...]" To: "[...] Windows 98 Second Edition [...]"

Microsoft Press  May 06, 2010 
Printed
Page 14

Invalid URL There is an invalid URL listed in the last sentence in the second to last paragraph on page 14. Change: "For more information about ECMA, see http://www.ECMA.ch and http://MSDN.Microsoft.com/Net/ECMA." To: "For more information about ECMA, see http://www.ecma-international.org/ and http://MSDN.Microsoft.com/Net/ECMA."

Microsoft Press  Jul 13, 2010 
Printed
Page 19

System.Security.Verifier.Exception Should Be System.Security.VerificationException In the last sentence on page 19, Change: "[...] System.Security.Verifier.Exception [...]" To: "[...] System.Security.VerificationException [...]"

Microsoft Press  May 06, 2010 
Printed
Page 20

Verifier Should Be Verification On page 20, in the box titled "Is Your Code Safe?", in last sentence of the third paragraph, Change: "[...] VerifierException [...]" To: "[...] VerificationException [...]"

Microsoft Press  Jul 13, 2010 
Printed
Page 27

CTS And CLR Should Be CLS On page 27, in the second sentence of the fourth paragraph, there is a reference to "CTS" and a reference to "CLR". Both of these should read "CLS".

Microsoft Press  May 06, 2010 
Printed
Page 28

Missing Text On page 28, the next to last sentence of the third paragraph is missing some words. Change: "The second error is because this type exposes two public methods that differ only by case: Abc and abc." To: "The second error is because this type exposes two public methods that differ only by case and return type: Abc and abc."

Microsoft Press  Jul 13, 2010 
Printed
Page 68

Standard Edition Should Be Second Edition On page 68, in the first paragraph, change the reference to "Windows 98 Standard Edition" to "Windows 98 Second Edition".

Microsoft Press  May 06, 2010 
Printed
Page 77

AssemblyAlgIDAttribute Should Be AssemblyAlgorithmidAttribute At the top of page 77, change "System.Reflection.AssemblyAlgIDAttribute" to "System.Reflection.AssemblyAlgorithmIdAttribute". Note there are two changes--ID becomes Id, and Alg becomes Algorithm.

Microsoft Press  Jul 13, 2010 
Printed
Page 78

Incorrect Build Number On page 78, in the listing AssemblyRef #1, Change: "Build Number: 0x0000c1e" To: "Build Number: 0x0000ce4"

Microsoft Press  May 06, 2010 
Printed
Page 81

Bad Breaks In Listing On page 81, there are two bad breaks in the listing. Change: /ur Uninstalls an assembly reference. Include the name of the assembly, type of reference, ID and data as parameters. Example: / ur myDLL.Version=1.1.0.0,Culture=en.PublicKeyToken=874e23ab874e23ab FILEPATH c:appsmyapp.exe MyApp To: /ur Uninstalls an assembly reference. Include the name of the assembly, type of reference, ID and data as parameters. Example: /ur myDLL.Version=1.1.0.0,Culture=en. PublicKeyToken=874e23ab874e23ab FILEPATH c:appsmyapp.exe MyApp Change: /uf Forces uninstall of an assembly by removing all install references. Include the full name of the assembly to remove as a parameter. Assembly will be removed unless referenced by Windows Installer. Example: / uf myDLL.Version=1.1.0.0,Culture=en.PublicKeyToken=874e23ab874e23ab To: /uf Forces uninstall of an assembly by removing all install references. Include the full name of the assembly to remove as a parameter. Assembly will be removed unless referenced by Windows Installer. Example: /uf myDLL.Version=1.1.0.0,Culture=en. PublicKeyToken=874e23ab874e23ab

Microsoft Press  Jul 13, 2010 
Printed
Page 92

Error In Code Sample The second attribute of Step 1 on page 92 is incorrect. Change:[assembly:DelaySign(true)]To:[assembly:AssemblyDelaySign(true)]

Microsoft Press  May 06, 2010 
Printed
Page 107

Policy.1.0.MyAsm.dll Should Be Policy.1.0.JeffTypes.dll On page 107, in the bulleted paragraph "The /out switch", Change: "[...] Policy.1.0.MyAsm.dll [...]" To: "[...] Policy.1.0.JeffTypes.dll [...]"

Microsoft Press  Jul 13, 2010 
Printed
Page 110

Standard Should Be Second On page 110, in the Note box, change the reference to "Windows 98 Standard Edition" to "Windows 98 Second Edition".

Microsoft Press  May 06, 2010 
Printed
Page 116

Incorrect Statement Regarding MemberwiseClone There is an error in the first sentence in the Description column for the MemberwiseClone Protected Method row of the System.Object class table located towards the bottom of Page 116. Change: "This nonvirtual method creates a new instance of the type and sets the new object's fields to be identical to this object's fields." To: "This nonvirtual method creates a new instance of the type and sets the new object's nonstatic fields to be identical to this object's nonstatic fields."

Microsoft Press  Jul 13, 2010 
Printed
Page 119

public void Should Be public static void On page 119, in the first line of the listing, Change: public void PromoteEmployee(Object o) { ... To: public static void PromoteEmployee(Object o) { ...

Microsoft Press  May 06, 2010 
Printed
Page 121

Incorrect Table Number On page 121, in the Table "Type-Safety Quiz", change the table number from "4-4" to "4-3".

Microsoft Press  Jul 13, 2010 
Printed
Page 121

Corrections To Table Items On page 121, in the table "Type-Safety Quiz", there are three incorrect lines. On line 10, change: "B b3 = d1;" To: "B b4 = d1;" On line 15, change: "B b4 = (B) o1;" To: "B b5 = (B) o1;" On line 16, change: "B b5 = (D) b2;" To: "B b6 = (D) b2;"

Microsoft Press  May 06, 2010 
Printed
Page 123

Complier Should Be Compiler On page 123, in the second sentence of the second paragraph, change "complier" to "compiler".

Microsoft Press  Jul 13, 2010 
Printed
Page 126

System.Collections.ArrayList Should Be System.IO.FileStream On page 126, in the first paragraph of "How Namespaces and Assemblies Relate" change "System.Collections.ArrayList" to "System.IO.FileStream"

Microsoft Press  Jul 13, 2010 
Printed
Page 126

System.Collections.StringCollections Should Be System.IO.FileSystemWatcher On page 126, in the first paragraph of "How Namespaces and Assemblies Relate" change "System.Collections.StringCollections" to "System.IO.FileSystemWatcher"

Microsoft Press  May 06, 2010 
Printed
Page 126

Correction To Sentence On page 126, in the box "How Names and Assemblies Relate", change the final line of the third paragraph from: "[...] source code and you'd use the /r:System.Windows.dll compiler switch." To: "[...] source code and use the /r:System.Windows.Forms.dll compiler switch.""

Microsoft Press  May 06, 2010 
Printed
Page 129

Int64 Should Be Int32 On page 129, in the second bulleted item, third line, change "Int64" to "Int32".

Microsoft Press  Jul 13, 2010 
Printed
Page 129

BinaryRead Should Be BinaryReader On page 129, in the listing in the third bulleted item, Change: BinaryReader br = new BinaryRead(...); ... To: BinaryReader br = new BinaryReader(...); ...

Microsoft Press  Jul 13, 2010 
Printed
Page 129

Correction To Sentence On page 129, in the third bulleted item, change the first sentence: "[...] that have type names in the method." To: "[...] that have type names as part of their method names."

Microsoft Press  May 06, 2010 
Printed
Page 130

Int64 Should Be Int16 There are two instances of Int64 that should be changed to Int16.Change:"converting from Single to Int64 requires a cast because Single can represent numbers of a larger magnitude than Int64 can."To:"converting from Single to Int16 requires a cast because Single can represent numbers of a larger magnitude than Int16 can."

Microsoft Press  May 06, 2010 
Printed
Page 135

ValueType Should Be System.ValueType On page 135, in the third paragraph, last sentence (above the Note box), change the final word "ValueType" to "System.ValueType".

Microsoft Press  Jul 13, 2010 
Printed
Page 138

Missing "Is" On page 138, in the second sentence, Change: "[...] C# thinks the instance initialized [...]" To: "[...] C# thinks the instance is initialized [...]"

Microsoft Press  May 06, 2010 
Printed
Page 140

InteropService Should Be Pluralized On page 140, in the box "How the CLR Controls the Layout of a Type's Fields", in the example at the bottom, Change: using System; using System.Runtime.InteropService; ... To: using System; using System.Runtime.InteropServices; ...

Microsoft Press  Jul 13, 2010 
Printed
Page 141

void Should Be Int32 On page 141, after the second paragraph is a code snip for the Add method, Change: public virtual void Add(Object value); To: public virtual Int32 Add(Object value);

Microsoft Press  Jul 13, 2010 
Printed
Page 141

Array Should Be ArrayList On page 141, in the code example, Change: ... a.Add(p); //Box the value type and add the // reference to the Array. ... To: ... a.Add(p); //Box the value type and add the // reference to the ArrayList. ...

Microsoft Press  May 06, 2010 
Printed
Page 144

Missing Semicolon On page 144, in the code example, Change: ... o = p } To: ... o = p; }

Microsoft Press  May 06, 2010 
Printed
Page 152

p Should Be p2 On page 152, in the third bulleted item, change the first two references to "p" to "p2".

Microsoft Press  Jul 13, 2010 
Printed
Page 155 & 157

Correction To Code Sample On pages 155 and 157, approximately middle of each page, Change: // Optional overloads of the == and != operators public static Boolean operator==(MyRefType o1, MyRefType o2) { if (ol == null) return false; return ol.Equals(o2); } To: // Optional overloads of the == and != operators public static Boolean operator==(MyRefType o1, MyRefType o2) { return Object.Equals(o1, o2); }

Microsoft Press  May 06, 2010 
Printed
Page 160

Capital "I" Needed On page 160, under "Summary of Implementing Equals and the ==/!= Operators", in the first bulleted item, references to "Uint16", "Uint32", "Uint64" all need the "i" capitalized so they read: "UInt16", "UInt32", "UInt64"

Microsoft Press  Jul 13, 2010 
Printed
Page 166

Correction To Code Sample On page 166, in the first code sample, Change: ... // Refer to a deep copy of the set passed. this.set = set.Clone(); To: ... // Refer to a shallow copy of the set passed. this.set = (ArrayList) set.Clone();

Microsoft Press  May 06, 2010 
Printed
Page 176

Incorrect Descriptions In Table 7-4 There are multiple errors in the description column of Table 7-4.In the Newslot row, change:"Method should not override a virtual method ... Applies only to virtual methods."To:"Method should not override an instance method ... Applies only to instance methods."In the Override row, change:"Applies only to virtual methods."To: "Applies only to derived methods."In the Final row, change:"Applies only to virtual methods."To:"Applies only to derived methods."

Microsoft Press  Jul 13, 2010 
Printed
Page 177

MaxInt32 Should Be MaxInt16 On page 177, on the last line, change "MaxInt32" to "MaxInt16".

Microsoft Press  May 06, 2010 
Printed
Page 179

Disregard Note Box On page 179, disregard the Note Box at the top of the page.

Microsoft Press  Jul 13, 2010 
Printed
Page 180

type's Should Be class's On page 180, in the final paragraph, Change: "[...] to initialize a type's constants, [...]" To: "[...] to initialize a class's constants, [...]"

Microsoft Press  Jul 13, 2010 
Printed
Page 180

Correction To Code Sample On page 180, in the code sample, Change: ... // This is an instance read-only field. public String readonly pathName = "untitled"; To: ... // This is an instance read-only field. public readonly String pathName = "untitled";

Microsoft Press  May 06, 2010 
Printed
Page 186

Correction To Error Text On page 186, in the second paragraph after the Note box, Change: "[...] produces the following: "error CS0573: 'SomeType.x': [...]" To: "[...] produces the following: "error CS0573: 'SomeValType.x': [...]"

Microsoft Press  May 06, 2010 
Printed
Page 188

Disregard Portion Of Sentence On page 188, in the third paragraph, disregard: "(or process if the assembly is loaded in a domain neutral fashion)"

Microsoft Press  Jul 13, 2010 
Printed
Page 199

2.5 Should Be 2.5F On page 199, in the code example, change: Rational r2 = 2.5; // Implicit cast from Single to Rational To:Rational r2 = 2.5F; // Implicit cast from Single to Rational

Microsoft Press  May 06, 2010 
Printed
Page 202

Initialize Should Be Initialized On page 202, in the upper code example, change: v += 10; // This method can use the initialize value in v. To: v += 10; // This method can use the initialized value in v.

Microsoft Press  Jul 13, 2010 
Printed
Page 204

ProcessingFiles Should Be ProcessFiles On page 204, in the third to last line at the bottom of the page,Change: void ProcessingFiles(ref FileStream fs) { To: void ProcessFiles(ref FileStream fs) {

Microsoft Press  Jul 13, 2010 
Printed
Page 204

Void Should Be Static Void On page 204, in the first code example, there are two lines beginning with the word "void" that need to be changed. Change:void StartProcessingFiles(out FileStream fs) { To:static void StartProcessingFiles(out FileStream fs) { Change:void ContinueProcessingFiles(ref FileStream fs) { To:static void ContinueProcessingFiles(ref FileStream fs) {

Microsoft Press  May 06, 2010 
Printed
Page 206

Void Should Be Static Void On page 206, in the code sample, change:void GetAnObject(out Object o) { To:static void GetAnObject(out Object o) {

Microsoft Press  May 06, 2010 
Printed
Page 218

Missing Word On page 218, the word "method" is missing in the first two bulleted items. In the first bullet, change: "...define a get accessor for the property." To: "...define a get accessor method for the property." In the second bullet, change: "...define a set accessor for the property." To: "...define a set accessor method for the property."

Microsoft Press  Jul 13, 2010 
Printed
Page 219

Delete Closing Brace The code sample on page 219 contains one closing brace too many. The code sample should read as follows: public void set_Age(Int32 value) { If (value < 0) // The 'value always identifies the new value. throw new ArgumentOutOfRangeExceptional( "Age must be greater than or equal to 0"); _Age = value; } }

Microsoft Press  May 06, 2010 
Printed
Page 220

Delete Parenthesis On page 220, in the code listing, next to last line, remove the final parenthesis. Change: return (byteArray[bitPos / 8] & (1 << (bitPos % 8 ))) != 0); To: return (byteArray[bitPos / 8] & (1 << (bitPos % 8 ))) != 0;

Microsoft Press  Jul 13, 2010 
Printed
Page 220

Correction To Code Listing On page 220, in the second section of the code listing, there is missing text. Change: if (numBits <= 0) throw new ArgumentOutOfRangeException("numBits must be > 0"); To: if (numBits <= 0) throw new ArgumentOutOfRangeException("numBits", "numBits must be > 0");

Microsoft Press  May 06, 2010 
Printed
Page 221

foreach Should Be for In the third section of the code listing after the sentence "Using the BitArray type's indexer...", the word "foreach" should be "for". Change: // Show the state of all the bits by calling the get accessor. foreach (Int32 x = 0; x < 14; x++) { To: // Show the state of all the bits by calling the get accessor. for (Int32 x = 0; x < 14; x++) {

Microsoft Press  Jul 13, 2010 
Printed
Page 222

Missing Word On page 222, the word "method" is missing in the first two bulleted items. In the first bullet, change: "...define a get accessor for the property." To: "...define a get accessor method for the property." In the second bullet, change: "...define a set accessor for the property." To: "...define a set accessor method for the property."

Microsoft Press  May 06, 2010 
Printed
Page 223

Changes To Code Listing On page 223, in the second code listing, there are three errors. On the first line, the words "SomeType" should be "BitArray", on the second line the word "as" should be capitalized, on the eighth line "cs.Bit(2)" should be "ba.Bit(2)". Change: ' Construct an instance of the SomeType type. Dim ba as new BitArray(10) ' Visual Basic uses ( ) instead of [ ] to specify array elements. Console.WriteLine(ba(2)) 'Displays True or False 'Visual Basic also allows you to access the indexer by its name. Console.WriteLine(cs.Bit(2)) 'Displays same as previous line NOTE: While not shown in the code samples here, the vertical ellipsis shown in the book should be retained. To: ' Construct an instance of the BitArray type. Dim ba AS new BitArray(10) ' Visual Basic uses ( ) instead of [ ] to specify array elements. Console.WriteLine(ba(2)) 'Displays True or False 'Visual Basic also allows you to access the indexer by its name. Console.WriteLine(ba.Bit(2)) 'Displays same as previous line

Microsoft Press  Jul 13, 2010 
Printed
Page 230

Final Paragraph Should Be Part Of Note Box On page 230, the final paragraph, beginning "As you can see, this type is nothing to write home about.", should be part of the Note box immediately above it.

Microsoft Press  May 06, 2010 
Printed
Page 232

Missing "virtual" On page 232, the word "virtual" is missing from the second section of the code listing. Change: // 2. A PUBLIC add_* method // Allows objects to register interest in the event. [MethodImplAttribute(MethodImplOptions.Synchronized) ] public void add_MailMsg(MailMsgEventHandler handler) { To: // 2. A PUBLIC add_* method // Allows objects to register interest in the event. [MethodImplAttribute(MethodImplOptions.Synchronized) ] public virtual void add_MailMsg(MailMsgEventHandler handler) {

Microsoft Press  Jul 13, 2010 
Printed
Page 232

Missing "virtual" On page 232, the word "virtual" is missing from the third section of the code listing. Change: // 3. A PUBLIC remove_* method // Allows objects to unregister interest in the event. [MethodImplAttribute(MethodImplOptions.Synchronized) ] public void remove_MailMsg(MailMsgEventHandler handler) { To: // 3. A PUBLIC remove_* method // Allows objects to unregister interest in the event. [MethodImplAttribute(MethodImplOptions.Synchronized) ] public virtual void remove_MailMsg(MailMsgEventHandler handler) {

Microsoft Press  May 06, 2010 
Printed
Page 234

Transposed Text In Code Listing On page 234, in the code listing, in the 26th line, the text is transposed. Change: "To: {0} From: {1} Subject: {2} Body: {3} " To: "From: {1} To: {0} Subject: {2} Body: {3} "

Microsoft Press  Jul 13, 2010 
Printed
Page 236

Brace Should Be Parenthesis On page 236, change the code example near the top of the page from: mm.remove_MailMsg(callback] ; To: mm.remove_MailMsg(callback) ;

Microsoft Press  May 06, 2010 
Printed
Page 255

.SubString Should Be .Substring On page 255, in the final code snip, ".SubString" should be ".Substring" Change: if (s.ToLower( ).SubString(10, 20).EndsWidth("exe")) { To: if (s.ToLower( ).Substring(10, 20).EndsWidth("exe")) {

Microsoft Press  Jul 13, 2010 
Printed
Page 273

Correction To Table 12-4 On page 273, in table 12-4, the entry for Member AppendInsert should be broken into 2 separate lines. Change: "AppendInsert" To: "AppendInsert"

Microsoft Press  Jul 13, 2010 
Printed
Page 273

Correction To Table 12-4 On page 273, in table 12-4, the entry for Member Type for Member Length is incorrect. Change: "Read only property" To: "Read/write property"

Microsoft Press  May 06, 2010 
Printed
Page 283-284

Replace Code Listing On page 283, replace the code listing beginning at the bottom third of the page (first line: "public StringBuilder AppendFormat(IFormatProvide formatProvider") and continuing on to page 284, with the following: public StringBuilder AppendFormat(IFormatProvider formatProvider, String format, params Object[] args) { // If an IFormatProvider was passed, find out // whether it offers an ICustomFormatter object. ICustomFormatter cf = null; if (formatProvider != null) cf = (ICustomFormatter) formatProvider.GetFormat(typeof(ICustomFormatter)); // Keep appending literal characters (not shown in this pseudocode) // and replaceable parameters to the StringBuilder's character array. while (MoreReplaceableArgumentsToAppend) { // argFormat refers to the replaceable format string obtained // from the format parameter String argFormat = ...; // argObj refers to the corresponding element // from the args array parameter Object argObj = ...; // argStr will refer to the formatted string to be appended // to the final, resulting string String argStr = null; // If a custom formatter is available, let it format the argument. if (cf != null) argStr = cf.Format(argFormat, argObj, formatProvider); // If there is no custom formatter or if it didn't format // the argument, try something else. if (argStr == null) { // Does the argument's type support rich formatting? IFormattable formattable = argObj as IFormattable; if (formattable != null) { // Yes; pass the format string and provider to // the type's IFormattable ToString method. argStr = formattable.ToString(argFormat, formatProvider); } else { // No; get the general format using // the thread's culture information. if (argObj != null) argStr = argObj.ToString(); else argStr = String.Empty; } } // Append argStr's characters to the character array field member. ... } return this; }

Microsoft Press  May 06, 2010 
Printed
Page 284

Doesn't Should Be Does On page 284, in the second paragraph after the code listing, change: "If the object doesn't support IFormattable, [...]" To: "If the object does support IFormattable, [...]"

Microsoft Press  Jul 13, 2010 
Printed
Page 302

Missing Semicolon In Code Sample There is a semicolon missing from a code sample on page 302.Change:"Console.WriteLine(Enum.Format(typeof(Color), 2, "G"))"To:"Console.WriteLine(Enum.Format(typeof(Color), 2, "G"));"

Microsoft Press  Jul 13, 2010 
Printed
Page 302

Error In Code Sample There is an error in the code sample at the top of page 302.Change:"Console.WriteLine(c.ToString("X")); // "2" (heX format)"To:"Console.WriteLine(c.ToString("X")); // "00000002" (heX format)"

Microsoft Press  May 06, 2010 
Printed
Page 303

Correction To Code Listing On page 303, in the code listing, second line from the top, change: "Console.WriteLine("{0,5:D} {1:G}",c, c); " To: "Console.WriteLine("{0,5:D} {0:G}",c); "

Microsoft Press  May 06, 2010 
Printed
Page 310

Section Should Be Chapter On page 310, change the very last word on the page, "section", to "chapter".

Microsoft Press  Jul 13, 2010 
Printed
Page 326

Error In Code Sample There is an error in the code sample at the bottom of page 326.Change:" Int32 CompareTo(Object object);"To:" Int32 CompareTo(Object obj);"

Microsoft Press  May 06, 2010 
Printed
Page 328

this Should Be other In Code Listing On page 328, in the code listing, third section, change: return (x == this.x) && (y == this.y) To: return (x == other.x) && (y == other.y)

Microsoft Press  Jul 13, 2010 
Printed
Page 334

Second Should Be Fourth There is an error near the end of the second paragraph on page 334.Change:"When WriteLine is called the second time,"To:"When WriteLine is called the fourth time,"

Microsoft Press  May 06, 2010 
Printed
Page 337

Error In Code Sample There is an error in the code sample at the bottom of page 337. Change:menu = gp.GetMenu()); To:menu = gp.GetMenu();

Microsoft Press  Jul 13, 2010 
Printed
Page 339

private Should Be protected On page 339, in the code listing, change: "// NOTE: No public/private used on the next line " To: "// NOTE: No public/protected used on the next line "

Microsoft Press  May 06, 2010 
Printed
Page 340

private Should Be protected On page 340, in the third and fourth paragraph, and in the sample errors between these paragraphs, there are four instances where the word "private" must be changed to "protected". Change: "Finally, notice that the IComparable.CompareTo method isn't prefixed with a public or private access modifier. In fact, the C# compiler produces one of the following errors if a public or private access modifier is added: error CS0106: The modifier 'public' is not valid for this item error CS0106: The modifier 'private' is not valid for this item The fact that IComparable.CompareTo can't have a public or private access modifier [...]" To: "Finally, notice that the IComparable.CompareTo method isn't prefixed with a public or protected access modifier. In fact, the C# compiler produces one of the following errors if a public or protected access modifier is added: error CS0106: The modifier 'public' is not valid for this item error CS0106: The modifier 'protected' is not valid for this item The fact that IComparable.CompareTo can't have a public or protected access modifier [...]"

Microsoft Press  Jul 13, 2010 
Printed
Page 341

Error In Sample Code There is an error in the code sample in the middle of page 341.Change:"n = ((IComparable) v1).CompareTo(v2)); // Boxes v1 and v2"To:"n = ((IComparable) v1).CompareTo(v2); // Boxes v1 and v2"

Microsoft Press  May 06, 2010 
Printed
Page 346

Incorrect Capitalization In Code Sample There is an error in the code sample in the middle of page 346. Uint32 should be UInt32.Change:"public Uint32 PlatformId = 0;"To:"public UInt32 PlatformId = 0;"

Microsoft Press  Jul 13, 2010 
Printed
Page 348

Error In Text There is an error in the text of the first paragraph on page 348.Change:"System.Runtime.InteropService namespace"To:"System.Runtime.InteropServices namespace"

Microsoft Press  May 06, 2010 
Printed
Page 355

Remove "and" On page 355, in the third paragraph, in the fifth sentence, change: "You'll recall that all CLS-compliant attributes are derived from System.Attribute and this type..." To: "You'll recall that all CLS-compliant attributes are derived from System.Attribute; this type..."

Microsoft Press  Jul 13, 2010 
Printed
Page 361

Error In Code Sample There is an error in the code sample at the top of page 361.Change:"// Override GetHashCode because Equals is overloaded."To:"// Override GetHashCode because Equals is overridden."

Microsoft Press  May 06, 2010 
Printed
Page 369

Error In Code Sample There is an error in the code sample at the bottom of page 369.Change:"void FeedbackToConsole(Object , Int32 , Int32 , String s) {"To:"Static void FeedbackToConsole(Object value, Int32 item, Int32 numItems, String s) {"

Microsoft Press  Jul 13, 2010 
Printed
Page 374

Correction To Code Sample On page 374, in the code snip after the second paragraph, middle of the page, change: " feedback(items[item], item, items.length); " To: " feedback(items[item], item + 1, items.length); "

Microsoft Press  Jul 13, 2010 
Printed
Page 374

Correction To Code Listing On page 374, in the first code listing (first line: "public void ProcessItems(Feedback feedback) { "), change: " feedback(items[item], item, items.length); " To: " feedback(items[item], item + 1, items.length); "

Microsoft Press  May 06, 2010 
Printed
Page 374

Correction To Code Sample On page 374, in the second code snip after the second paragraph, middle of the page, change: " feedback.Invoke(items[item], item, items.length); " To: " feedback.Invoke(items[item], item + 1, items.length); "

Microsoft Press  May 06, 2010 
Printed
Page 378

Error In Code Sample There is an error in the code sample in the middle of page 378.Change:"Feedback fb3 = new Feedback(appobj.FeedbackToStream);"To:"Feedback fb3 = new Feedback(appobj.FeedbackToFile);"

Microsoft Press  Jul 13, 2010 
Printed
Page 378

Errors In Code Sample There are two errors in the code sample at the bottom of page 378.Change:"fbArray[2] = new Feedback(appobj.FeedbackToStream);Feedback fbChain = Delegate.Combine(fbArray);"To:"fbArray[2] = new Feedback(appobj.FeedbackToFile);Feedback fbChain = (Feedback) Delegate.Combine(fbArray);"

Microsoft Press  May 06, 2010 
Printed
Page 381

Missing Parenthesis In Code Sample On page 381, in the Note box, in the code sample, a parenthesis is missing. Change: // Do fb and fbChain refer to the same object? "False" Console.WriteLine(Object.ReferenceEquals(fb, fbChain); To: // Do fb and fbChain refer to the same object? "False" Console.WriteLine(Object.ReferenceEquals(fb, fbChain));

Microsoft Press  Jul 13, 2010 
Printed
Page 383

FeedbackToStream Should Be FeedbackToFile There are four instances of FeedbackToStream in the code sample on page 383. All of these instances of FeedbackToStream should be changed to FeedbackToFile.

Microsoft Press  May 06, 2010 
Printed
Page 438

Error In Table 18-2 There is an incorrect statement in the Description column of the 2 row in Table 18-2.Change:"In this case, no dialog box is displayed to the user and AppDomain's UnhandledException event doesn't fire. Instead, the CLR ..."To:"In this case, no dialog box is displayed to the user. Instead, the CLR ..."

Microsoft Press  Jul 13, 2010 
Printed
Page 459

Error In Code Sample There are two error in the code sample at the top of page 459.Change:"Console.WriteLine(a.Length);"// After a.Length returns, a isn't refered to in the code and is no"To:"Console.WriteLine(a.Count);" // After a.Count returns, a isn't refered to in the code and is no"

Microsoft Press  May 06, 2010 
Printed
Page 473

"would" Should Be "should" On page 473, in the comments section of the code listing section beginning "// The common method that does the actual cleanup. ", change: "// If this class weren't sealed, this method would be protected." To: "// If this class weren't sealed, this method should be protected."

Microsoft Press  Jul 13, 2010 
Printed
Page 473

"wouldn't" Should Be "would" In the code listing on page 473, line 31, change: "// If this class weren't sealed, this method wouldn't be protected." To: "// If this class weren't sealed, this method would be protected."

Microsoft Press  May 06, 2010 
Printed
Page 477

"didn't" Should Be "did" On page 477, in the paragraph immediately after the code listing, third sentence, change: "For if Finalize didn't execute, [...]" To: "For if Finalize did execute, [...]"

Microsoft Press  Jul 13, 2010 
Printed
Page 491

Error In Code Sample There is an error in the code sample in the middle of page 491.Change:"// This static ArrayList contains references"To:"// This static Stack contains references"

Microsoft Press  May 06, 2010 
Printed
Page 492

Missing } Bracket In Code Sample "The second instance of the code sample located at the end of the Expensive destructor on page 492 is missing a } bracket."Change: pool.Push(this); } To: pool.Push(this); } }

Microsoft Press  Jul 13, 2010 
Printed
Page 496 & 497

"J" Should Be "K" In figures 19-12 and 19-13, on pages 496 and 497, the letter "J" found in the box should be changed to a "K".

Microsoft Press  May 06, 2010 
Printed
Page 500

Error In Code Sample There is an error in the code sample at the bottom of page 500.Change:"// Create a new BaseObj in the heap."To:"// Create a new GenObj in the heap."

Microsoft Press  Jul 13, 2010 
Printed
Page 523

Delete "second version" On page 523, in the first sentence of the section "Reflecting Over a Type's Members: Binding", change: "In the second version of the Reflector application, [...]" To: "In the Reflector application, [...]"

Microsoft Press  May 06, 2010 
Printed
Page 535

Incorrect Version Statement There is an incorrect version statement in the middle of page 535.Change:"Version=1.0.2411.0"To:"Version=1.0.3300.0"

Microsoft Press  Jul 13, 2010 
Printed
Page 537

RunTime Should Be RuntimeType There is an error in the text at the top of page 537.Change:"the IL code just saves the RuntimeTime reference..."To:"the IL code just saves the RuntimeType reference..."

Microsoft Press  May 06, 2010 
Printed
Page 539

Error In Table 20-3 There is an error in the Description column of the IsDefined row in Table 20-3.Change:"Returns true if one and only one instance..."To:"Returns true if at least one instance..."

Microsoft Press  Jul 13, 2010 
Printed
Page 547

Incorrect Text In Important Box There is an error in the last paragraph of the Important box on page 547.Change:"invoke a member, the member performs the same kind"To:"invoke a member, the method performs the same kind"

Microsoft Press  May 06, 2010 
Printed
Page 553

Incorrect Statement There is an incorrect statement in the first paragraph on page 553. The second half of the first paragraph after "Note that these methods" should be removed.The remaining text should read:"All these methods return Type objects that represent an interface.Determining which members of a type implement a particular interface ..."

Microsoft Press  Jul 13, 2010 
Printed
Page 553

Incorrect Text There is an incorrect reference to Type in the last paragraph of page 553.Change:"about the interface's member as defined by the Type."To:"about the interface's member as defined by the TargetType." 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.

Microsoft Press  May 06, 2010