vb.net - VB.NET 中的通用类型

标签 vb.net generics structure

问题很简单。

我有如下三个通用结构:

主要结构

Public Structure Pointer(of T) 'Here is where the data type must be constrained
    Dim BP As BasePointer
    Dim BV As BaseValue(of T)

    'Some code
End Structure

指针结构

Public Structure BasePointer 'This is a pointer itself, no problem (I think)
    'Some code
End Structure

此结构采用 Pointer(of T) 受约束的数据类型

Public Structure BaseValue(Of T)
'Some code
End Structure

据我所知,结构体可以在没有 new 构造函数的情况下进行初始化。 这个想法是约束某些值类型,但问题是它们可以是,例如,类(作为类型,而不是泛型容器)、结构(也作为类型,而不是泛型容器)、IntPtr、Char、Integer、float、delegate 、枚举、接口(interface)等(如您所见,它们是值和引用参数,我不能将 (T 为类) 或 (T 为结构),因为我不知道要传递什么类型)。

该程序的思想是创建一个具有主结构和两个辅助结构的指针。二级结构之一采用指针的值,另一个是指针本身。

操作如下:

主要结构捕获类型T(这里是我想要进行约束的地方),并且,如果数据类型有效,它将它传递给接受已经约束的辅助结构值,如果不是,它将丢弃它(使用该数据类型将不会创建指针)。一旦类型被传递到辅助值结构,就会创建指针。

示例:

Dim sample as Pointer(Of ULong)

如果ULong数据类型在约束范围内,指针将传递给BV变量(该变量初始化为BaseValue结构),否则将显示一条消息。

这在类中不会有问题,因为它必须强制初始化。在一个类中,即使它具有没有约束的泛型类型 T ,在同一个类构造函数中我也会创建约束并获取它。但在一个结构中,我不知道如何在不初始化它的情况下做到这一点。

我不想指向所有现有的数据类型,只想指向那些我认为更常用的数据类型(大约 20、25 种左右,但数据类型不同)。这就是数据限制的原因。

之前我忘记提到,如果可以做到这一点,你可以用C#编写它,我或多或少理解它,我想我可以翻译它。

再次提前致谢。

最佳答案

这不是泛型的工作原理。这个想法是,在泛型类型或方法内部,您可以确保泛型类型参数具有特定的功能。例如,您可以限制 T实现IComparable接口(interface),然后,在您的类型或方法内,您知道您可以在任何 T 上访问该接口(interface)的成员实例。您可以限制 T成为特定的具体类型,然后您就知道任何 T实例将具有该类型的成员。泛型类型约束基本上是说保证您能够使用任何 T以特定方式实例化。这么说T可以是任何类型列表中的任何一个,除此之外的任何内容都不能保证能够使用 T以特定方式实例化,因此不适用于泛型。

关于vb.net - VB.NET 中的通用类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62601058/

相关文章:

c# - 在 IE6/7 中使用 IHTMLElement5/6(适用于 IE8/9)会发生什么?它会转向 IHTMLElement 行为吗?

java - 为什么这个在 Java 7 中编译而不在 Java 8 中编译?

java - 处理 java.lang.Number 子类操作的通用泛型方法

c - 对 C 中的结构元素进行排序并打印出来

c - 如何正确计算结构的大小?

c# - .NET 最小化到托盘并最小化所需资源

ajax - VB.net 匿名类型具有来自 AJAX 调用的不正确的属性大小写

c - C 中的结构顺从

javascript - 新手菜单/子菜单问题

Java - 为什么将具体实现作为参数发送到通用接口(interface)无法编译?