嗔秤戻幣�哉膵�云利匈嬉蝕湊蛸賜�塋床四衲���萩晦編報炎嘔囚^泡仟 ̄云利匈��
VB2008貫秘壇欺娼宥(PDF鯉塀哂猟井)-及38何蛍
酔楯荷恬: 梓囚徒貧圭�鮗� ○ 賜 ★ 辛酔堀貧和鍬匈 梓囚徒貧議 Enter 囚辛指欺云慕朕村匈 梓囚徒貧圭�鮗� ● 辛指欺云匈競何! 泌惚云慕短嗤堋響頼���誅卒亮茂�俊彭堋響��辛聞喘貧圭 "辺茄欺厘議箝誓匂" 孔嬬 才 "紗秘慕禰" 孔嬬��
tation in the base class。
Scenario 3�此�Implementing an Interface
Interface IInterface
Sub Method�┌�
End Interface
Class Implementation
Implements IInterface
Public Sub Method�┌� Implements IInterface。Method
Console。WriteLine�─�Implementation。Method;��
End Sub
End Class
Module Test
Public Sub Run�┌�
Dim implementation As Implementation = New Implementation�┌�
Dim inst As IInterface = implementation
' Calls Implementation。Method
implementation。Method�┌�
' Calls Implementation。Method
inst。Method�┌�
End Sub
End Module
o Keywords used�此�none。
o The class that implements the interface has a behavior�察�like when a class subclasses and
implements a MustOverride method。
o Whether the variable is an interface type or an implementation type�察�the method
Implementation。Method�┌� is called。
´´´´´´´´´´´´´´´´´´´´´´Page 213´´´´´´´´´´´´´´´´´´´´´´´
CH AP T E R 7 * L E AR N IN G AB O U T CO M P O N E N TS AN D C L AS S H I E R AR C HI E S 191
Scenario 4�此�Implementing Two Interfaces with Same Method/Property Name
Interface IInterface1
Sub Method�┌�
End Interface
Interface IInterface2
Sub Method�┌�
End Interface
Class Implementation
Implements IInterface1�察�IInterface2
Public Sub Method1�┌� Implements IInterface1。Method
Console。WriteLine�─�Implementation。IInterface1。Method;��
End Sub
Private Sub Method2�┌� Implements IInterface2。Method
Console。WriteLine�─�Implementation。IInterface2。Method;��
End Sub
End Class
Module Test
Public Sub Run�┌�
Dim implementation As Implementation = New Implementation�┌�
Dim inst1 As IInterface1 = implementation
Dim inst2 As IInterface2 = implementation
' Calls Implementation。Method1
inst1。Method�┌�
' Calls Implementation。Method2
inst2。Method�┌�
End Sub
End Module
o Keywords used�此�special notation for the implementation of a particular interface method
��for example�察�Implements IInterface1。Method and Implements IInterface2。Method��。
o The methods that are converted to implement a particular interface can still be called。
In the example�察�Method1�┌� is declared as Public�察�and thus if you have a reference to
Implementation�察�then you can call Method1�┌�。
Scenario 5�此�Implementing an Interface That Allows Overriding
Interface IInterface
Sub Method�┌�
End Interface
´´´´´´´´´´´´´´´´´´´´´´Page 214´´´´´´´´´´´´´´´´´´´´´´´
192 CH AP T E R 7 * L E A R N IN G AB OU T CO M P O N E N TS AN D C L AS S H I E R AR C H IE S
Class Implementation
Implements IInterface
Public Overridable Sub Method�┌� Implements IInterface。Method
Console。WriteLine�─�Implementation。Method;��
End Sub
End Class
Class ImplementationDerived
Inherits Implementation
Public Overrides Sub Method�┌�
Console。WriteLine�─�ImplementationDerived。Method;��
End Sub
End Class
Module Test
Public Sub Run�┌�
Dim implementation As ImplementationDerived = _
New ImplementationDerived�┌�
Dim inst As IInterface = implementation
' Calls ImplementationDerived。Method
implementation。Method�┌�
' Calls ImplementationDerived。Method
inst。Method�┌�
End Sub
End Module
o Keywords used�此�Overridable and Overrides。
o By default�察�when you implement an interface without using the Overridable keyword�察 �
you are saying that the derived class can overload only the method。 In many cases�察�this
is appropriate�察�as you will want to override the method and thus will need to use the
Overridable and Overrides keywords。
o This is a mon problem�察�and most beginning Visual Basic programmers are puzzled
by the overloading behavior。
Scenario 6�此�An Inheritance Tree That Overrides and Overloads
Class Base
Public Overridable Sub Method�┌�
Console。WriteLine�─�Base。Method;��
End Sub
End Class
´´´´´´´´´´´´´´´´´´´´´´Page 215´´´´´´´´´´´´´´´´´´´´´´´
CH AP T E R 7 * L E AR N IN G AB O U T CO M P O N E N TS AN D C L AS S H I E R AR C HI E S 193
Class Derived1
Inherits Base
Public Overrides Sub Method�┌�
Console。WriteLine�─�Derived1。Method;��
End Sub
End Class
Class Derived2
Inherits Derived1
Public Overloads Overridable Sub Method�┌�
Console。WriteLine�─�Derived2。Method;��
End Sub
End Class
Class Derived3
Inherits Derived2
Public Overrides Sub Method�┌�
Console。WriteLine�─�Derived3。Method;��
End Sub
End Class
Module Test
Public Sub Run�┌�
Dim derivedCls As Derived3 = new Derived3�┌�
Dim baseCls As Base = derivedCls
Dim derived2cls As Derived2 = derivedCls
' Calls Derived3。Method
derivedCls。Method�┌�
' Calls Derived1。Method
baseCls。Method�┌�
' Calls Derived3。Method
derived2cls。Method�┌�
End Sub
End Module
o Keywords used�此�Overridable�察�Overrides�察�and Overloads。
o The inheritance hierarchy is saying that Derived1。Method�┌� overrides the behavior of
Base。Method�┌�。 Derived2。Method�┌� overloads the behavior of Derived1。Method�┌��察�while
establishing a new overriding base method。 Derived3。Method�┌� overrides the behavior
Derived2。Method�┌��察�and not Base。Method�┌� ��very important��。
o When confronted with a plex inheritance hierarchy as illustrated by scenario 6�察�it is
important that you start at the base class and work up the inheritance hierarchy。
´´´´´´´´´´´´´´´´´´´´´´Page 216´´´´´´´´´´´´´´´´´´´´´´´
194 CH AP T E R 7 * L E A R N IN G AB OU T CO M P O N E N TS AN D C L AS S H I E R AR C H IE S
More Type´Casting Details
This chapter illustrated some type´casting examples。 In Visual Basic�察�you have two ways to
type cast�此�
o A forced type cast�察�which can also be used on value types
o A type cast that queries if a type cast is possible
Consider this hierarchy�此�
Class Base
Public Sub Method�┌�
Console。WriteLine�─�Base。Method;��
End Sub
End Class
Class Derived
Inherits Base
Public Overloads Sub Method�┌�
Console。WriteLine�─�Derived。Method;��
End Sub
End Class
The next step is to instantiate the type Derived and cast the instance to the base type�此�
Dim derivedCls As Derived = New Derived�┌�
Dim baseCls As Base = derivedCls
When casting from a derived type to a base class type�察�a type cast is not necessary and you
can assume it is implied。
A type cast is necessary when you want to cast a base class instance to a derived class instance。
Following is the source code for a forced type cast�察�assuming the inheritance hierarchy from
the previous cast。
Dim backToDerived As Derived = DirectCast��baseCls�察�Derived��
The forced cast is the use of the method DirectCase。 The cast is forced because a conver
sion to the desired type will occur�察�regardless if it is possible or not。 If the cast is not possible�察�a
cast exception is thrown。
Another way to perform a type cast is to use a query cast�察�as illustrated by the following
code�察�again assuming the inheritance hierarchy of this section。
Dim backToDerived As Derived = TryCast��baseCls�察�Derived��
In the code�察�the cast involves using the TryCast method。 This cast is a query because a cast
will be attempted。 If the cast is successful�察�then an instance of the type is assigned to the vari
able backToDerived。 If the cast is not possible�察�then backToDerived is assigned a Nothing value。
No exception is thrown。 This casting technique is possible only for reference types。
´´´´´´´´´´´´´´´´´´´´´´Page 217´´´´´´´´´´´´´´´´´´´´´´´
CH AP T E R 7 * L E AR N IN G AB O U T CO M P O N E N TS AN D C L AS S H I E R AR C HI E S 195
The Important Stuff to Remember
In this chapter�察�you learned about interfaces and implementations。 Here are the key points
to remember�此�
o Using interfaces is not like using inheritance。 They are two separate designs�察�even though
interfaces will use inheritance。
o Interfaces at an abstract level imply ideas of how you would like your application to work。
o Ideas when implemented as interfaces should be general and applicable to multiple
application implementations for the domain。
o Ideas are represented using Visual Basic interfaces。 And interfaces are implemented
using classes or structures。 But note that interfaces are reference types。
o Factories are used to instantiate implementations and return an instance that imple
ments an interface。 Using a factory means that the user of an interface does not need to
know which type of implementation object is instantiated。
o Interfaces can be considered as facets that might be targeting a specific characteristic of
an implementation。 However�察�as illustrated in the previous chapter�察�interfaces do not
expose Friend state or the Friend workings of the implementations。
o ponents are a fundamental way of developing code and should be your primary
way of writing code。 For the remainder of this book�察�interfaces will be used whenever
possible。 Take notice and try to understand what the idea behind the interface is。
Some Things for You to Do
The following are a couple things for you to do to apply what you¨ve learned in this chapter。
1。 Implement your own tax system using the predefined base classes。
*Note Because of the number of possible tax systems�察�I do not provide an answer for exercise 1。 If you
want me to review your answer�察�please send it to me at christianhgross@gmail。。
2。 Add functionality to the tax engine¨s base classes that implement the behavior of a
minimum tax´free amount。 This means if your ine is not above the minimum tax
free amount�察�you do not pay taxes。
´´´´´´´´´´´´´´´´´´´´´´Page 218´´´´´´´´´´´´´´´´´´´´´´´
´´´´´´´´´´´´´´´´´´´´´´Page 219´´´´´´´´´´´´´´´´´´´´´´´
C H A P T E R 8
* * *
Learning About ponent
Oriented Architecture
So far�察�you have learned the essentials of Visual Basic。 With the essentials�察�you can write a
functional application that uses classes�察�objects�察�interfaces�察�and inheritance。 In this chapter�察 �
you¨ll learn about a Visual Basic programming technique that some developers define as structural。
A structural programming technique is when the code does not directly serve to solve a business
problem�察�but solves a problem relating to building the application。
Another purpose of this chapter is to give you more experience with developing ponent
oriented code。 In particular�察�you¨ll learn how to develop a kernel。 Developing a kernel demon
strates the power and flexibility of the ponent´oriented development approach。 You can
build a working system even though you might not know what all of the implementations are
ahead of time。 This type of development makes it possible to modularize development�察�in that
individual teams are responsible for certain interfaces。 Then once the pieces have been imple
mented�察�they are fitted together like a jigsaw puzzle。 Of course�察�interfaces and ponents do
not guarantee success�察�but they do ensure one team does not need to wait for another team to
finish its code。
To demonstrate all of these concepts�察�we¨ll build an application that controls lighting in
buildings�察�using the kernel programming approach。
Understanding Kernels
Imagine you are the owner of a house or mercial building�察�and you want to reduce your
electricity bill。 One way of doing that is to automate the lighting system of your building so that
lights are on when they need to be。 What is unique about this system is that you have a controller
and the devices that are controlled。
The controller controls devices that it does not know about ahead of time�察�but fulfills a
contract。 The lighting system is a controller�察�programmatically called a kernel�察�because the
rooms that it controls are not known initially。 The rooms are known when the controller is used
to manage the lighting system。 The kernel programming approach is one where a core of func
tionality is developed。 The core functionality by itself does not work�察�because it relies on other
pieces to perform certain tasks。 In programming terms�察�this is called developing ponents
that use interfaces and implementations。
197
´´´´´´´´´´´´´´´´´´´´´´Page 220´´´´´´´´´´´´´´´´´´´´´´´
198 CH
酔楯荷恬: 梓囚徒貧圭�鮗� ○ 賜 ★ 辛酔堀貧和鍬匈 梓囚徒貧議 Enter 囚辛指欺云慕朕村匈 梓囚徒貧圭�鮗� ● 辛指欺云匈競何!
梁椣戻幣�� 梁心弌傍議揖扮窟燕得胎��傍竃徭失議心隈才凪万弌誌育断蛍�輌臆惨軼僑〃�燕慕得珊辛參資誼持蛍才将刮襲潜��範寔亟圻幹慕得 瓜寡追葎娼得辛參資誼寄楚署衛、持蛍才将刮襲潜填��