Object-Oriented Programming with Visual Basic .NET by J. P. Hamilton This errata page lists errors outstanding in the most recent printing. If you have technical questions or error reports, you can send them to booktech@oreilly.com. Please specify the printing date of your copy. This page was updated June 24, 2004. 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 Confirmed errors: (x) under "Audience" subhead; "fundamental principals" should be: "fundamental principles" [14] Example 2-1 in Chapter 2; Sentence reads, "You can change the name of the output file by using the /out compiler option: c:vbc /t:exe /r:hello.dll /out:hello.exe hello-client.vb" If I use this line command I obtain the file hello.exe. But when I run it, I receive an exception error. If I use insteed the line command: c:vbc /t:exe /r:hello.dll hello-client.vb I obtain the file hello-client.exe that run with no error. Is it possible that the problem in the first example depends on the fact that the two files have same name: 'hello.dll' and 'hello.exe' ? AUTHOR: This is in fact an error. The original syntax in the book works...but the /out parameter cannot have the same assembly name as the /r parameter. So, something like this is more appropriate (making the output file called helloworld.exe instead): C:\>vbc /t:exe /r:hello.dll /out:helloworld.exe hello-client.vb {25} Table2-1; In my help file, it is stated that the Decimal type is 128 bit, not 96. AUTHOR: The "decimal" keyword which is used in C# is a 128-bit integer. The System.Decimal class which corresponds to the Decimal type in VB.NET is a 96-bit integer. This is NOT an error in the book, but perhaps some clarification is in order. {40} Private Sub Encrypt(); Private Sub Encrypt() ' End Function should be Private Sub Encrypt() ' End Sub AUTHOR: Confirmed. [62] Example 3-13; Public Class B Public WithEvents myClassA As A ... End Class should be Public Class B Private WithEvents myClassA As A ... End Class AUTHOR: Confirmed. The declaration should read: Private WithEvents myClassA As A {64} Private Property MyClassA(); Private Property MyClassA() As A Get Return _myClassC End Get Set If Not ... End Set End Property should be Private Property MyClassA() As A Get Return _myClassA End Get Set(ByVal Value As A) If Not ... End Set End Property AUTHOR: Confirmed {64} Public Class B; Public Class B Private _myClassA As ClassA Public Sub New() MyClassA = New C() MyClassA.Raise() End Sub End Class should be Public Class B Private _myClassA As A Public Sub New() MyClassA = New A() MyClassA.Raise() End Sub End Class AUTHOR: Confirmed. This is a bug. [88] 1st Paragraph; Protected NotOverridable Function IsValidNumber() As Boolean 'Use Luhn Mod 10 algorithm to validate 'card number End Function Should be: Protected NotOverridable Overrides Function IsValidNumber() As Boolean 'Use Luhn Mod 10 algorithm to validate 'card number End Function