梓囚徒貧圭�鮗� ○ 賜 ★ 辛酔堀貧和鍬匈��梓囚徒貧議 Enter 囚辛指欺云慕朕村匈��梓囚徒貧圭�鮗� ● 辛指欺云匈競何��
!!!!隆堋響頼��紗秘慕禰厮宴和肝写偬堋響��
´´´´´´´´´´´´´´´´´´´´´´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 type with the generics parameter。 For
example�察�suppose this interface is defined�此�
Interface IExample
Sub Method�┌�
End Interface
Adding an IExample constraint to the generics parameter allows you to define a class
as follows�此�
Class ExampleMgr��Of DataType As �� IExample����
Private _inst As DataType
Public Sub New��ByVal inst As DataType��
_inst = inst
End Sub
Public Sub DoSomething�┌�
_inst。Method�┌�
End Sub
End Class
In the example�察�the constraint of IExample allows a developer to call Method�┌�。 If the constraint
were not there�察�the reference to Method would generate a piler error�察�because Method�┌� is
not a method of DataType。
But is this ability to reference a method an advantage�拭�After all�察�you could write the
ExampleMgr code without using generics�察�like this�此�
´´´´´´´´´´´´´´´´´´´´´´Page 446´´´´´´´´´´´´´´´´´´´´´´´
424 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
Class ExampleMgr
Dim _inst As IExample
Public Sub New��ByVal inst As IExample��
Me。_inst = inst
End Sub
Public Sub DoSomething�┌�
_inst。Method�┌�
End Sub
End Class
The generics code and the interface´based code do the exact same thing�察�and using
generics offers no advantage in this example。 But that is not always the case。 Consider the
following modified example of ExampleMgr。
Class ExampleMgr��Of DataType As �� IExample ����
Dim _inst As DataType
Public Sub New��ByVal inst As IExample��
Me。_inst = CType��inst�察�DataType��
End Sub
Public Sub DoSomething�┌�