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()
_inst。Method()
End Sub
Public ReadOnly Property Inst() As DataType
Get
Return _inst
End Get
End Property
End Class
With generics; you can write a property that contains a reference to the base type。 Had
you used the pure interface…based code; the Inst property would need to be of type IExample; and
to get the same effect as the generics example; a cast would be involved。 A cast is not the
end of the world; but it is inconvenient and not type…safe; since you don’t know if a cast will
work until you execute the code。
You can add multiple interfaces and classes as constraints; although you are limited。 The
limitations are identical to the limitations when subclassing a class or interface:
o You can subclass only a single class。
o You can subclass as many interfaces as desired; but they must be declared after the class。
…………………………………………………………Page 447……………………………………………………………
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 425
Using the New Constraint
The purpose of the New constraint is to limit the data type to one that has a default constructor;
as in this example:
Class Example(Of DataType As {New})
Private _value As DataType
Public Sub New()
_value = New DataType()
End Sub
End Class
Without the New constraint; the bolded code cannot be piled。
The constructor that is defined with the New constraint does not take parameters; and it
would seem that this is a bother。 After all; you might want to instantiate the type with some
state。 What you can do is constrain DataType; and then instantiate the type using object initial
izers。 For example; the following is an interface that has a single property。
Interface IBase
Property Value() As Integer
End Interface
bining the IBase interface and the New keyword as constraints; you could write the
following code。
Class Example(Of DataType As {IBase; New})
Private _value As DataType
Public Sub New()
_value = New DataType() With {。Value = 10}
End Sub
End Class
In the modified example; the bolded code instantiates DataType; and then using the
constraints; the object initializer that defines _value is possible。
Using the Class Constraint
The main purpose of the Class constraint is to indicate whether the generics type is a value
type or a reference type。 Here is an example of a type that wants to manage only reference types:
Class AssumeReferenceType(Of DataType As {Class})
Private _value As DataType
Public Sub New(ByVal value As DataType)
End Sub
End Class
…………………………………………………………Page 448……………………………………………………………
426 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
If you were to declare the AssumeReferenceType using an Integer; as shown in the following
example; the code would not pile。
Dim cls As AssumeReferenceType(Of Integer) = _
New AssumeReferenceType(Of Integer)(Nothing)
Nullable Types
In ; Nothing means no value; and we all understand what it represents; right? For example;
the following code shows how to use Nothing。
Dim value As Object = Nothing
If value Is Nothing Then
Console。WriteLine(〃Yup a Nothing〃)
End If
The example is obvious and does nothing useful。 If you attempted to call the Object。
ToSt
小说推荐
- 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章
- SQL语言艺术(PDF格式)
- -Page 1-SQLSSQQLL语言艺术内容介绍本书分为12章,每一章包含许多原则或准则,并通过举例的方式对原则进行解释说明。这些例子大多来自于实际案例,对九种SQL经典查询场景以及其性能影响讨论,非常便于实践,为你数据库应用维护人员阅读。资深 SQL 专家 Stéphane Faroult倾力打
- 其他
- 最新章:第27章
- JMS简明教程(PDF格式)
- -Page 1-JMS1.1规范中文版卫建军2007‐11‐22-Page 2
- 其他
- 最新章:第28章