【问题标题】:Are there properties that differ in parameters and return type?是否存在参数和返回类型不同的属性?
【发布时间】:2014-03-05 21:49:53
【问题描述】:

我有一个类调用 CalcArray,其中包含一个名为 Amounts() 的双精度数组,以及两个 intsStartPeriodEndPeriod

用户几乎总是希望与数组中的项目进行交互,而不是 Periods 或对象本身。所以理想情况下,我想:

property AnAmount() as CalcArray 'So the user can talk to the object if they need to
property AnAmount(i as Integer) as Double 'So the user can just get the value directly

这似乎有时有效,但有时无效。这只是一个语法问题吗?或者这样的过载是不可能的?

【问题讨论】:

    标签: vb.net


    【解决方案1】:

    您可以使用 函数 来执行此操作,该函数会根据调用方式返回不同的值。特别是因为你有一个参数,一个函数可能更合适:

    Public Function AnAmount(Of T)(parm As SomeType) As T
    

    使用它:

    Dim n as Decimal
    n = AnAmount(Of Decimal)(foo)
    

    它作为一种避免返回对象然后必须使用 CType 转换返回的方法非常有用。在这种情况下,amount 表示值类型,但该函数将接受 Point、Rectangle 等作为 T,因此您可能需要检查有效的类型请求。

    【讨论】:

    • 我第一次没有看到这个,感谢另一个线程中的指针。我不确定我是否完全理解如何使用它......在我的情况下,sig 可能是Public Function DetailRows(Of T)() As ICollection?我必须在 func 主体中做些什么才能使其工作吗?或者这只是 DirectCast 的简写形式?
    • 它更适用于编辑前问题的Function One... 部分。 T 允许您将任何受支持的Type 传递给该方法。您还可以执行Function DetailRows(Of T, TT)(params) As TT,这将允许您指定与收到的不同的返回类型 (TT)。如果返回的是 Com,那么 TT 将受到限制 - Com 扼杀泛型
    【解决方案2】:

    您可能遇到了函数或属性不能仅因返回类型而异的限制。通常,如果签名已更改,则输出类型也会在过载时更改。还要注意使用默认属性的限制需要一个参数。在某些情况下,类继承是个问题,被遮蔽的属性和函数可能需要明确指定阴影、重载、覆盖等,否则语言将不允许遮蔽。

    如果这些不涵盖您所看到的案例,请尝试捕捉问题示例并研究您的解决方案中相同命名属性的所有位置,并在此处报告结果。

    【讨论】:

    • 好的,那么它似乎可能,我会假设这只是我的语法等。谢谢,我只是在其他地方找不到明确的声明。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-11
    • 2020-07-04
    • 2022-06-12
    • 2011-12-18
    相关资源
    最近更新 更多