Programming C# 3.0, Fifth Edition by Jesse Liberty and Donald Xie The unconfirmed error reports are from readers. They have not yet been approved or disproved by the author or editor and represent solely the opinion of the reader. Here's a key to the markup: [page-number]: serious technical mistake {page-number}: minor technical mistake : important language/formatting problem (page-number): language change or minor formatting problem ?page-number?: reader question or request for clarification This page was updated April 9, 2008. UNCONFIRMED errors and comments from readers: [21] Numeric types table; The "Integral-unsigned" and "Integral-unsigned" headers in the table have been swapped. {36} halfway down the page; The second if/else block contains the line: valueTwo = valueOne + 1; this was changed from: valueTwo = valueOne++; in the 3rd edition of the book (which I also own). The 3rd edition's output matches the output presented in both books. The 5th edition's does not. 3rd: ValueOne: 31 ValueTwo: 30 5th: ValueOne: 30 ValueTwo: 31 (37) First program output; Setting valueTwo to valueOne value, and incrementing valueOne ValueOne: 31 ValueTwo: 30 should be ValueOne: 30 ValueTwo: 31 - because valueTwo is assigned to valueOne + 1 in the second conditional test in book. (82) Example 4-6.; using System.Drawing; Compiler throws error when using Visual Studio 2008 C# Expression Edition. The authors have given no clue if System.Drawing is not a default accessible namespace and needs to be imported or referenced. (90) public class Tester, first Time object instance; Erroneous code is Time t1 = new Time(currentTime); t.DisplayCurrentTime(); // error that "t" should be "t1" Need to make the code Time t1 = new Time(currentTime); t1.DisplayCurrentTime(); (93) public int Hour definition; No comment is made in text about capitalizing the property Hour vs lowercase for private member variable hour - don't know if this is standard practice to maintain same name but differ only in case but it would be worth commenting on in text - particularly for people like me who just copied code from earlier example, then got stack overflows in DisplayCurrentTime, etc. when "Hour" used instead of "hour" - good OJT in the importance of case, though. [104] Control constructor; typos in case, should be this.Top = top; this.Left = left; Does not compile otherwise [104] DrawWindow() function for Control class; the function definition should have the properties Top and Left capitalized as in Console.Writeline( "Control: drawing Control at {0}, {1}", Top, Left ); will not compile otherwise. (105) DrawWindow() function for Button class; the function definition should have the properties Top and Left capitalized as in Console.Writeline( "Drawing at button at {0}, {1}\n", Top, Left ); will not compile otherwise. [106] Example in Calling Base Class Constructors; last line of example in this section does NOT match program base(theTop, theLeft) // call base constructor in program text given on page 104 the line reads base(top, left) // call base constructor (114) DisplayValue method in class Program; Console.Writeline statement is missing closing parenthesis (186-187) Table 9-2 spanning pp 186-87; The Interface item "IColletion" is listed twice in Table 9-2 with two different Purpose explanations. I believe the Purpose given for the first instance of "ICollection" in the table is correct, but the Purpose given for the second instance implies, to me, that the intended Interface item should not be "ICollection", but some other Interface entity. I'm just not sure what was intended. (266-271) Multiple: The text continually refers to the VIRTUAL FUNCTION OnSecondChange as the DELEGATE INSTANCE from the preceding example. I believe the delegate instance SecondChanged is actually intended. This mistake is made multiple times (consistently) over the 5 pages identified above and was very confusing until I realized that this was a typo. Hopefully I am not mistaken, as I have continued my learning with the assumption that this is a typo. (267) Last couple of code snippets; Not consistent with the program listing on previous pages and the following page (p. 268). Change: public event SecondChangeHandler OnSecondChange; to: public event SecondChangeHandler SecondChanged; [375] Example 16-1 does not contain any references to the listbox as described in paragraph above nor on the bottom of page 377.