【问题标题】:Function overloads based on interface inheritance基于接口继承的函数重载
【发布时间】:2015-11-12 13:59:15
【问题描述】:

假设我有一个基本接口,另一个继承自它:

Public Interface Parent
    {stuff}
End Interface

Public Interface Child
    Inherits Parent
    {other stuff}
End Interface

我也有一个 sub 和它的重载:

Public Sub doStuff(parameter As Parent)
     {do some stuff}
End Sub 

Public Sub doStuff(parameter As Child)
     {do some other stuff}
End Sub 

如果我这样调用子函数,它会调用“子函数”:

Dim myParam As Child = New SomeClassImplementingChild
doStuff(myParam)

但是,假设我在编译时不知道 coolParameter 的类型,有什么方法可以让它调用“子函数”:

Public Sub coolFunction(coolParameter As Parent)
    doStuff(coolParameter)
End Sub 

Dim myParam As Child = New SomeClassImplementingChild
coolFunction(myParam)

【问题讨论】:

  • 您可以测试类型以查看它是否实现了IChild,如果是,则在调用该方法之前对其进行转换。最后一部分有点模糊,因为DoStuff 已经超载了
  • 问题是coolFunction不知道IChild,所以无法测试coolParameter看是否实现

标签: vb.net interface overloading


【解决方案1】:

我找到了一种解决方法,我猜这是我最接近解决方案的方法:

doStuff(Convert.ChangeType(coolParameter, coolParameter.GetType))

这将在运行时转换为“真实”类型,从而有效地调用正确的函数。但是,函数都必须公开才能以这种方式调用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 2017-07-18
    相关资源
    最近更新 更多