在.NET中是否有内置的泛型类?

时间:2013-02-25 09:43:27

标签: vb.net generics

是否有一个类与此类完全相同?

Class X(Of T)
    Public value As T
End Class

请注意,Nullable(Of T)Tuple(Of T)都不等于此类,因为它们不允许您设置成员值。该类应具有以下属性:

  1. 当作为参数传递时,被调用方法所做的任何更改都应该影响发送的对象,即它不应该像创建内部类型那样创建对象的副本。
  2. 应允许使用语法value将成员x.value = <some value>设置为值,其中x是X的对象。

2 个答案:

答案 0 :(得分:1)

不是一个确凿的答案,但我会试一试。

我个人以前从未见过这种类型的课程。甚至关于泛型的文档也显示了一个与您的类似的示例类,这些类在示例中被创建和使用:

msdn generics in the .net framework.

以下是示例:

Public Class Generic(Of T)
    Public Field As T

End Class

....

Public Shared Sub Main()
    Dim g As New Generic(Of String)
    g.Field = "A string" 
    '...
    Console.WriteLine("Generic.Field           = ""{0}""", g.Field)
    Console.WriteLine("Generic.Field.GetType() = {0}", g.Field.GetType().FullName)
End Sub

答案 1 :(得分:1)

虽然我打电话给班级Holder<T>和字段Value,但我有时几乎逐字地创建了这样一个班级。这样一个类有两个很好的用例:

  • 给定Holder<someValueType>的集合,可以对集合的内容进行方便的就地修改。例如,给定List<Holder<Point>>,可以说MyList[3].Value.X += 5;

  • 如果T属于允许原子操作的类型,则即使集合不是线程安全的,也可以对Holder<T>集合的内容执行线程安全的原子操作。例如,在我事先知道字典需要的所有密钥的一个场景中,我创建了一个Dictionary<String, Holder<Integer>>,然后可以让多个线程使用Interlocked.Increment来计算每个密钥的次数那些字符串出现。即使Dictionary不是线程安全的,程序也是线程安全的而没有锁定,因为存储在字典中的Holder<Integer>项集永远不会改变。

如果您想使用内置类型,可以使用内置类型:T[],大小为1。这种类型的主要缺点是类型中没有固有的东西可以保证元素零实际存在(即它不是一个空数组)。