【问题标题】:Property with Type parameter?带有类型参数的属性?
【发布时间】: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


【解决方案1】:

令人沮丧的是,.Net 不允许这样做。它给出了我们在这里发现的错误:

https://docs.microsoft.com/en-us/dotnet/visual-basic/misc/bc32065

于 2017 年 10 月访问:

不能在此声明中指定类型参数

使用类型参数列表声明编程元素,但该编程元素不符合泛型类型的条件。

不符合泛型条件的编程元素包括属性、运算符、事件和构造函数。使用类型参数列表声明任何这些元素都会导致此错误。

错误 ID:BC32065

纠正这个错误

  • 从声明中删除 Of 关键字和类型参数。

【讨论】:

    猜你喜欢
    • 2021-11-13
    • 2014-04-28
    • 2018-07-04
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 2013-11-22
    • 2015-11-18
    • 1970-01-01
    相关资源
    最近更新 更多