Managed; which references the variable _managed。 The idea behind this class is to assign an
object in the constructor that can be referenced using the property。 The class Container does
not know what the variable _managed does or its capabilities。 Container does not care; because
Container is acting like a basket that holds an instance of whatever is given to it。
The Container class could be used as follows:
Dim container As Container = New Container(New MyType())
TryCast(container。Managed; MyType)。Method()
When Container is instantiated; the _managed data member is assigned an instance of
MyType。 MyType is a type that is used for illustrative purposes and has a single method; Method()。
To retrieve and use the managed type; the property Managed is referenced。 However; the
method Method() cannot be called directly because the property Managed is of type Object; and
thus you need to cast the property to type MyType so that the call to Method() is legal。
The cast using TryCast will result in a valid instance of MyType or a Nothing value; resulting
in a null object reference exception。 Here’s a safe way of using the Managed property:
Dim container As Container = New Container(New MyType())
If TypeOf container。Managed Is MyType Then
TryCast(container。Managed; MyType)。Method()
End If
The bolded code is the addition of the If block to test whether the container references the
type MyType。 Not shown is what the code should do if the property Managed is not MyType。 The
fact that you need to verify that the container references the correct type; and you also need to
think of an alternative plan if the type is incorrect; adds quite a bit of code。 It’s like that sentence
about the duck—sure; you get the general idea of what is being said; but are you 100% sure of
the meaning?
…………………………………………………………Page 309……………………………………………………………
CH AP T E R 1 1 ■ L E A R N IN G AB O U T 。 N E T G E N E R I CS 287
Now look at the following code; which implements a container using generics。
Public Class GenericsContainer(Of ManagedType)
Private _managed As ManagedType
Public Sub New(ByVal toManage As ManagedType)
_managed = toManage
End Sub
Public ReadOnly Property Managed() As ManagedType
Get
Return _managed
End Get
End Property
End Class
You can write code that uses generics and code that provides types based on
generics。 The definition of GenericsContainer demonstrates code that provides types based on
generics。 You’ll see the code that uses generics next。
generics parameters are associated with types; such as classes and interfaces; or with
methods。 In the case of GenericsContainer; the generics parameter ManagedType is a
placeholder for an actual type。
■Note monly; developers use the notation of a single letter when defining a generics parameter。
I am not a fan of that notation; because it tells me nothing; especially when there are multiple parameters。 I
remend using an identifier that describes what the parameter does; appended with the word Type; to
indicate a generics parameter is being defined。
With GenericsContainer; ManagedType is used as an identifier in the place of the identifier
object in the type Container。 This is a rule of thumb。 Whenever you find yourself using an object
generically to define a type; you probably could use generics。 Think of generics
types as general things。
The following code demonstrates how to use GenericsContainer with MyType。
Dim container As GenericsContainer(Of MyType) = _
New GenericsContainer(Of MyType)(New MyType())
container。Managed。Method()
When instantiating GenericsContainer; notice how the identifier ManagedType must be
replaced with an identifier that represents an already existing type。 This identifier replacement
results in a new and unique type (also called a concrete type)。 The advantage of generics is
that when you provide a concrete type; you don’t need to check to make sure that everything is
correct。
The runtime will generate a type that has an intent similar to the following code。
…………………………………………………………Page 310……………………………………………………………
288 CH AP T E R 1 1 ■ L E A R N I N G A B OU T 。 N E T G E N E R I CS
Public Class GenericsContainerMyType
Dim _managed As MyType
Public Sub New(ByVal toManage As MyType)
_managed = toManage
End Sub
Public ReadOnly Property Managed() As MyType
Get
Return _managed
End Get
End Property
End Class
Visual Basic piles a generics type as an inplete type。 When the inplete
type is concretized; creates a brand…new type; and does this without requiring the devel
oper to do anything in particular。 This means that if you use GenericsContainer with 15 different
types; will generate 15 definitions of GenericsContainer while the program is executing。
ABSTRACTION AND GENERICS
With generics; you can verify and ensure that everything is being said properly; with the cost being
plexity。 Consider the sentence that clearly described the duck。 To produce it; you need to have learned
additional rules regarding grammar。 Whe
小说推荐
- oracle从入门到精通(PDF格式)
- -Page 1-Oracle 从入门到精通-Page 2-资源来自网络,仅供学习 Oracle 从入门到精通一、SQL 8
- 最新章:第37章
- C语言游戏编程从入门到精通(PDF格式)
- -Page 1-Page 2-Page 3-Page 4-Page 5-Page 6-Page 7-Page 8-Page 9-Page 10-Page 11-Page 12-Page 13-Page 14
- 最新章:第4章
- Java编程思想第4版[中文版](PDF格式)
- -Page 1-Page 2《Thinking In Java》中文版作者:Bruce Eckel主页:http/BruceEckel.编译:Trans Bot主页:http/memberease~transbot致谢-献给那些直到现在仍在孜孜不倦创造下一代计算机语言的人们!指导您利用万维网的语言进
- 最新章:第295章
- 深入浅出MFC第2版(PDF格式)
- -Page 1-Page 2-山高月小山高月小 水落石出水落石出山高月小山高月小 水落石出水落石出-Page 3-深入淺出MFC(第版 使用Visual C 5.0 MFC 4.2)Dissecting MFC(Second Edition Using Visual C 5.0 MFC 4.2)侯俊
- 最新章:第309章
- VC语言6.0程序设计从入门到精通
- -Page 1-Visual C 6.0 程序设计从入门到精通求是科技 王正军 编著
- 最新章:第136章
- SQL 21日自学通(V3.0)(PDF格式)
- -Page 1-SQL 21 日自学通(V1.0 翻译人 笨猪目录目录 1译者的话 14第一周概貌 16从这里开始 16
- 最新章:第170章
- 2008年青年文摘精编版
- 作者:中国青年出版社“初恋”的惩罚.作者:凡 凡 文章来源《真情》2005年第4期 点击数:6608 更新时间:2005-6-5过了年,我就十八岁了。离高考只剩下四个多月了。这一段,班里的男女生相互间递纸条、写情书、约会等地下活动慢慢的多了起来。我这个“尖子生”也突然感到了不安、慌乱,并且自责。不知
- 最新章:第230章
- JMS简明教程(PDF格式)
- -Page 1-JMS1.1规范中文版卫建军2007‐11‐22-Page 2
- 最新章:第28章
- SQL语言艺术(PDF格式)
- -Page 1-SQLSSQQLL语言艺术内容介绍本书分为12章,每一章包含许多原则或准则,并通过举例的方式对原则进行解释说明。这些例子大多来自于实际案例,对九种SQL经典查询场景以及其性能影响讨论,非常便于实践,为你数据库应用维护人员阅读。资深 SQL 专家 Stéphane Faroult倾力打
- 最新章:第27章