Visual Baisc.NET 2005中的泛型

本文介绍了一个VB.NET泛型类的实例,并将其转换为C#代码。该泛型类实现了IComparer接口,用于比较正则表达式匹配对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       昨天看到一段VB.NET代码,其中的IComparer(Of Match)一处看不懂,想把它转为C#,只看出实现IComparer接口。后查资料这是VB.NET中泛型。

1  Public   Class  AlphaComparer
2      Implements  IComparer(Of Match)
3 
4      Public   Function   Compare ( ByVal  x  As  System.Text.RegularExpressions.Match,  ByVal  y  As  System.Text.RegularExpressions.Match)  As   Integer   Implements  System.Collections.Generic.IComparer(Of System.Text.RegularExpressions.Match).Compare
5         Return   String .Compare(x.Value, y.Value,  True )
6      End Function
7  End Class
      根据泛型在C#中的语法,转换为:
1       public   class  AlphaComparer : IComparer < Match >
2      {
3           public   int  Compare(System.Text.RegularExpressions.Match x, System.Text.RegularExpressions.Match y)
4          { 
5               return   string .Compare(x.Value, y.Value,  true );
6          }
7      }

VB.NET 2005中 建立泛型类

  使用泛型的时候,你应该选择有广泛用途的类,这样的话建立泛型类所需要的时间最终会在减少开发时间方面给予你回报。例如,集合就是一种处理多个数据类型的类,并且一般你会在多个应用程序中使用同一个集合的多种不同的形式。你不需要每次根据草稿建立集合,而是使用泛型建立一个泛型类原型(prototype)。首先,你需要给代码添加如下所示的Imports语句:

Imports System.Collections.Generic

  添加Imports语句之后,你就可以建立泛型类了。基本的类看起来很常见。你可以使用属性、函数、子程序、字段或可以在类中使用的其它任何东西,如列表1所示:

  列表1.定义一个泛型类类型

Public Class MyGenericCollection(Of ItemType)

 ' 定义一个通用的集合
 Private Items As Collection(Of ItemType)

 ' 建立构造函数
 Public Sub New()
  Items = New Collection(Of ItemType)
 End Sub

 ' 返回集合中数据项的数量
 Public ReadOnly Property Count() As Integer
  Get
   Return Items.Count
  End Get
 End Property

 ' 得到或设置一个特定的数据项
 Default Public Property Item(ByVal Index As Integer) As ItemType
  Get
   Return Items(Index)
  End Get
  Set(ByVal value As ItemType)
   Items(Index) = value
  End Set
 End Property

 ' 给集合添加新的数据项
 Public Sub Add(ByVal Value As ItemType)
  Items.Add(Value)
 End Sub

 ' 从集合中删除数据项
 Public Sub RemoveAt(ByVal Item As Int32)
  Items.RemoveAt(Item)
 End Sub

End Class

  这个类的声明看起来很常见,但是请留意“(Of ItemType)”条目。这个条目就是泛型类与标准类的差别。你可以把它看作是一个占位符,在未来实例化这个类的时候,你需要提供类型。当.NET框架组件发现这个条目的时候,它用使用这个类的代码所提供的类型来替换这个条目。当然,你没有必要在类中使用ItemType(数据项类型)——你可以把泛型类随便叫什么名字,就像为变量命名一样。

  由于这是一个集合类,代码首先执行的事务是建立一个保持集合的全局变量。但是,由于你希望把这个集合与泛型数据类型关联起来,因此再次使用专用的“(Of ItemType)”条目告诉.NET框架组件来建立一个特定的集合。这就是强数据类型定义开始起作用的地方。尽管你并不知道集合将使用的数据类型,但是.NET框架组件将会,而且能够为你建立这种数据类型的集合。

  在所有的类中你都必须包含一个构造函数或者New()子程序。在例子中构造函数实例化集合。同样,一定要使用“(Of ItemType)”代码来确保代码正确地对待泛型数据。

  你可以像平时一样使用这个集合。例如,Count属性返回集合中数据项的数量。实际上,这段代码与标准类中使用的代码看起来没有差别。

  有时你必须处理特定的数据项类型。Item属性演示了这种原理。请注意,这个属性返回一个ItemType类型的值——你现在并不知道数据的类型,但是未来.NET框架组件会指定类型。实际上,当我建立这个类的时候,IDE自动地为我建立了正确的Set()方法。请注意,这个方法也依赖于ItemType。但是,使用泛型并没有阻止你建立标准的属性条目。例如,property属性是这个类的默认值,因为我们使用Default关键字定义了它。

  这个类的末尾是两个子程序。第一个根据ItemType给集合添加新值;第二个使用数据项编号从集合中删除一个值。开发者不可能把错误的数据类型添加到集合中,因为.NET框架组件指定并监视着数据类型。因此,你不用担心某个人提供了类型错误的数据,尽管这个类接受了通常的输入。我们把这种功能与使用Object进行对比,使用Object时开发者可能提供任何类型的输入信息,而你必须执行检测以确保它是正确的类型。

       ....关于VB.NET2005中的泛型请参见
            <<Visual Baisc.NET 2005中使用泛型>>
            http://dev.yesky.com/SoftChannel/72342380468240384/20041116/1876323.shtml

转载于:https://www.cnblogs.com/wintersun/archive/2007/03/02/661132.html

内容概要:该研究通过在黑龙江省某示范村进行24小时实地测试,比较了燃煤炉具与自动/手动进料生物质炉具的污染物排放特征。结果显示,生物质炉具相比燃煤炉具显著降低了PM2.5、CO和SO2的排放(自动进料分别降低41.2%、54.3%、40.0%;手动进料降低35.3%、22.1%、20.0%),但NOx排放未降低甚至有所增加。研究还发现,经济性和便利性是影响生物质炉具推广的重要因素。该研究不仅提供了实际排放数据支持,还通过Python代码详细复现了排放特征比较、减排效果计算和结果可视化,进一步探讨了燃料性质、动态排放特征、碳平衡计算以及政策建议。 适合人群:从事环境科学研究的学者、政府环保部门工作人员、能源政策制定者、关注农村能源转的社会人士。 使用场景及目标:①评估生物质炉具在农村地区的推广潜力;②为政策制定者提供科学依据,优化补贴政策;③帮助研究人员深入了解生物质炉具的排放特征和技术改进方向;④为企业研发更高效的生物质炉具提供参考。 其他说明:该研究通过大量数据分析和模拟,揭示了生物质炉具在实际应用中的优点和挑战,特别是NOx排放增加的问题。研究还提出了多项具体的技术改进方向和政策建议,如优化进料方式、提高热效率、建设本地颗粒厂等,为生物质炉具的广推广提供了可行路径。此外,研究还开发了一个智能政策建议生成系统,可以根据不同地区的特征定制化生成政策建议,为农村能源转提供了有力支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值