分享
 
 
 

创建您自己的集合类(CollectinBase的使用)

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

通过从众多 .NET Framework 集合类之一继承,并添加实现您自己的自定义功能的代码,可以创建您自己的集合类。在本主题中,您将使用继承来创建一个从 CollectionBase 继承的简单的强类型集合。

.NET Framework 在 System.Collections 命名空间中提供了若干集合类型的类。其中有些类(如 Stack、Queue 和 Dictionary)是已经实现以完成特定任务的专用类。而有些类(如 CollectionBase 和 DictionaryBase)则是已经具有某些基本功能,但将大部分实现工作都留给开发人员完成的 MustInherit (abstract) 类。

CollectionBase 类已经具有 Clear 方法和 Count 属性的实现,它维护一个称为 List 的 Protected 属性,并将该属性用于内部存储和组织。其他方法(如 Add 和 Remove)以及 Item 属性需要实现。

在该演练中,您使用 CollectionBase 类创建一个称为 WidgetCollection 的类。它是一个只接受小部件的集合,并且将其成员作为 Widget 类型公开,而不是接受对象并将成员作为 Object 类型公开。您然后实现将小部件添加到集合中和移除适当索引处的小部件的方法,您还实现 Item 属性以返回适当索引处的小部件对象。

创建类

第一步是创建要放入到 WidgetCollection 中的 Widget 类。

创建 Widget 类

' Visual Basic

Public Class Widget

Public Name as String

End Class

创建 WidgetCollection 类

' Visual Basic

Public Class WidgetCollection

Inherits System.Collections.CollectionBase

End Class

实现 Add 和 Remove 方法

现在您将实现 Add 方法,以便 WidgetCollection 只添加 Widget 对象。

' Restricts to Widget types, items that can be added to the collection.

Public Sub Add(ByVal awidget As Widget)

' Invokes Add method of the List object to add a widget.

List.Add(aWidget)

End Sub

在该方法中,您将通过 Add 方法所带的参数添加到 List 对象中的项限制为 Widget 类型。尽管 List 对象可以接受任何类型的对象,但该方法禁止添加 Widget 类型以外的任何对象,并充当 List 对象的“包装”。

现在您有了将小部件添加到集合中的方法。您现在必须实现移除这些小部件的方法。通过与创建 Add 方法类似的方式来做到这一点,创建一个接受索引作为参数并反过来调用 List.RemoveAt 方法的 Remove 方法。

实现 Remove 方法

' Visual Basic

Public Sub Remove(ByVal index as Integer)

' Check to see if there is a widget at the supplied index.

If index > Count - 1 Or index < 0 Then

' If no widget exists, a messagebox is shown and the operation is

' cancelled.

System.Windows.Forms.MessageBox.Show("Index not valid!")

Else

' Invokes the RemoveAt method of the List object.

List.RemoveAt(index)

End If

End Sub

该方法接受整数值作为索引参数。如果该值有效,它将被传递给 List 对象的 RemoveAt 方法,从而从集合中移除位于所指示的索引处的项。

为完成基本的集合功能,您需要实现最后一部分,即 Item 属性。Item 属性使您可以通过引用索引获取集合中某一对象的引用。鉴于您已经具有将成员添加到集合的 Add 方法,在该演示中,Item 将为 ReadOnly 属性,但在其他上下文中不必如此。由于 C# 不允许属性带参数,所以如果使用的是 C# 则需要将 Item 作为方法实现。

实现 Item 属性

' This line declares the Item property as ReadOnly, and

' declares that it will return a Widget object.

Public ReadOnly Property Item(ByVal index as Integer) As Widget

Get

' The appropriate item is retrieved from the List object and

' explicitly cast to the Widget type, then returned to the

' caller.

Return CType(List.Item(index), Widget)

End Get

End Property

在集合中,语法 Collection.Item(0) 和 Collection(0) 经常可以互换。如果希望集合支持该语法,则应使 Item 属性成为 Default 属性(在 Visual Basic 中)或实现索引器(在 C# 中)。有关详细信息,请参见组件的默认属性。

通过验证,继承collectionBase的类可以正常地进行数据的序例化,反序例化,即可以在viewstate中对继承collectionBase的类集合进行保存,回送.

而如果继承listarray,则不能实现数据的反序列化,表现为用viewstate进行类集的状态维护时出现数据丢失,尤其是在类集合有嵌套子集合的时候

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有