…………………………………………………………Page 443…………………………………………………………… CH AP T E R 1 6 ■ L E A R N I N G A B OU T O TH E R V IS U AL B A SI C T E C HN IQ U E S 421 Public ReadOnly Property Real() As Double Get Return _real End Get Set(ByVal value As Double) _real = value End Set End Property End Class plexType is an immutable type that has two data members representing the real and imaginary number parts。 The goal is to define the + operator so that the following code can be piled。 Dim a As plexType = New plexType(1。0; 10。0) Dim b As plexType = New plexType(2。0; 20。0) Dim c As plexType = a + b Overloading the + operator means to add a method that has a special notation。 The following is the modified plexType type with the overloaded operator implemented (bolded)。 Public NotInheritable Class plexType Private ReadOnly _imaginary As Double Private ReadOnly _real As Double Public Sub New(ByVal real As Double; ByVal imaginary As Double) _real = real _imaginary = imaginary End Sub Public Shared Operator +(ByVal a As plexType; ByVal b As plexType) _ As plexType Return New plexType((a。Real + b。Real); (a。Imaginary + b。Imaginary)) End Operator Public Overrides Function ToString() As String Return String。Concat(New Object() {〃(〃; _real; 〃) (〃; _imaginary; 〃)i〃}) End Function Public ReadOnly Property Imaginary() As Double Get Return _imaginary End Get End Property …………………………………………………………Page 444…………………………………………………………… 422 CH AP T E R 1 6 ■ L E A R N I N G A B OU T O TH E R V IS U AL B A SI C TE C H N IQ U E S Public ReadOnly Property Real() As Double Get Return _real End Get End Property End Class The declaration of the overloaded operator is a specially defined function; which follows these rules: o The method is always declared as Shared in the context of the type。 o The method has a return type; which should be the type that you want to construct。 In most cases; it is the type of the declaration (except where a Boolean is required)。 o The method identifier starts with the keyword Operator; followed by a space; and then the operator being overloaded (+; …; and so on)。 The GoTo Statement The GoTo statement allows you to jump from one spot in the code to another。 In the past; when we did not have objects; methods; and other advanced programming constructs; developers used the GoTo statement because they had no other choice。 Currently; many in the software industry dislike the GoTo statement。 They think that the GoTo statement is a sign of poor program ming; and that you never need to use it。 The Channel 9 forum (http://channel9。msdn。/ ShowPost。aspx?PageIndex=1&PostID=14652) has a good discussion on the use of GoTo statements。 In this discussion; a person who was against the GoTo statement said this: The only possible exception would be if you are doing some sort of puter graphics app; where I would tolerate a (for y) (for x) nesting; because the inner loop is likely to be quite simple and the structure makes more sense as an entirety。 So; he would tolerate the GoTo statement in a specific situation; and that means that one can’t argue that GoTo is all bad。 What I like about how Visual Basic implemented GoTo is that it is designed to solve a partic ular problem; but not raise the old problems of spaghetti code making a mess of things。 So if you need to use a GoTo statement; go ahead; just don’t use it excessively。 One example where it is not easily possible to avoid using a GoTo statement is in the following pseudo…code。 Do While FirstActionLoop() Do While SecondActionLoop() If BreakOutOfLoops() Then GoTo EXIT_ALL End If Loop Loop EXIT_ALL: …………………………………………………………Page 445…………………………………………………………… CH AP T E R 1 6 ■ L E A R N I N G A B OU T O TH E R V IS U AL B A SI C T E C HN IQ U E S 423 This code has two loops。 If the code is executing the second loop and decides to end pro cessing; then exiting the loop bees a bit tricky; as you can break execution only one loop at a time using the Exit Do statement。 Thus; one solution is to use the GoTo statement; as shown。 The GoTo statement is associated with an identifier that represents a label。 The label can be placed almost anywhere in the declared method。 An exception is that you can’t place a label in a Select statement。 However; you can place the label before or after the GoTo keyword。 Generics Constraints generics have been covered in several chapters。 An additional aspect of generics is constraints; which can be optionally used to optimize programming。 Constraints limit the types that the parameter can be。 Three types of constraints are Class; New; and a specific type。 As a general rule; a constraint is added in the form of an As statement; as follows: Class Example(Of DataType As {New}) End Class This example limits DataType to types that have a default constructor。 Using the Type Constraint Type constraints allow you to associate a minimal ty