【发布时间】:2015-05-17 21:22:09
【问题描述】:
有可能在 VB.Net 中设计一个只读属性,它接受像这个伪示例这样的类型参数吗?:
Public ReadOnly Property Resources(of T) As IEnumerable(Of T)
Get ' Returns the value of a function.
Return Me.GetResources(Of T)()
End Get
End Property
还有这样的重载?:
Public ReadOnly Property Resources As IEnumerable(Of Object)
Get ' Returns the value of a function.
Return Me.GetResources(Of Object)()
End Get
End Property
PS:我的 Class 的定义不是通用的。
【问题讨论】:
-
如果类不是通用的,那么 T 来自哪里?
-
@Plutonix:方法可以在方法级别是通用的(T 来自方法定义:例如,“Sub Test(Of T)(p As T)”)。不幸的是,您不能对属性执行此操作。
-
这是 VB 和 C#(甚至 C++/CLI)的限制——你根本不能拥有通用属性。对于您的示例之类的情况,它会派上用场,但是对 CLR 内部工作有更多经验的人可能会对此限制提供一些见解。
-
@DaveDoknjas generic properties on a generic class 是合法的。这里的问题是 a) 该类不是通用的,因此第一个 Prop 包含三分之二的答案:a
function(of T) As T- 将其作为方法实现,并且还处理相关的延迟加载方面。 b) 代码块 2 不是适当的重载,因为只有返回类型不同。重载由参数类型、数量和顺序定义,而不是返回类型。你不能拥有的是一个 Prop,它自己决定要返回什么类型 (T),这是 OP似乎 所追求的以及我问的原因。 -
@Plutonix:我想我们只是在术语上存在分歧——当我说“泛型方法”时,我只是指一种引入泛型参数“T”而不是引入“T”的类的方法。您不能拥有引入通用参数的属性。由于这个原因,OP 的第一个示例在所有 .NET 语言中都是非法的,因为它是一个试图引入泛型参数的属性。
标签: .net vb.net visual-studio types properties