Vb.net Net使继承的可重写方法采用不同的参数

Vb.net Net使继承的可重写方法采用不同的参数,vb.net,inheritance,Vb.net,Inheritance,在VB.Net中,我有一个变量,它是两个类中的一个的实例,两个类都是从父类派生的,但哪个类是在运行时确定的。为此,我将变量声明为父类,然后根据真/假值将其设置为一个子类或另一个子类 之后,我调用子类的唯一公共方法(Main),我希望它所采用的参数根据它是哪个子类而有所不同。然而,我发现我不能用覆盖或重载来实现这一点,至少在我的理解中是这样。有办法做到这一点吗 我想我可以将Main1和Main2作为具有特定参数类型的继承方法,并有条件地调用它们,但我只是想看看是否可以保持简单 这是我试图完成的一个

在VB.Net中,我有一个变量,它是两个类中的一个的实例,两个类都是从父类派生的,但哪个类是在运行时确定的。为此,我将变量声明为父类,然后根据真/假值将其设置为一个子类或另一个子类

之后,我调用子类的唯一公共方法(Main),我希望它所采用的参数根据它是哪个子类而有所不同。然而,我发现我不能用覆盖或重载来实现这一点,至少在我的理解中是这样。有办法做到这一点吗

我想我可以将Main1和Main2作为具有特定参数类型的继承方法,并有条件地调用它们,但我只是想看看是否可以保持简单

这是我试图完成的一个模型,但它不起作用:

Public Class ThisParam
End Class

Public Class Param1
    Inherits ThisParam
End Class

Public Class Param2
    Inherits ThisParam
End Class

Public Class ThisBase
    Public Overridable Sub Main (X as ThisParam)
        'Empty for inheritance
    End Sub
End Class

Public Class Child1
    Inherits ThisBase

    Public Overrides Sub Main(X as Param1)
       'Do Stuff
    End Sub
End Class

Public Class Child2
    Inherits ThisBase

    Public Overrides Sub Main(X as Param2)
       'Do Stuff
    End Sub
End Class

Dim MyObject As ThisBase
Dim MyParam as ThisParam

If True then MyObject = New Child1 Else MyObject = New Child2 End If
If True then MyParam =  New Param1 Else MyParam = New Param2 End If

MyObject.Main(MyParam)  

您需要重载。我确实尝试了重载,但因为MyParam的初始声明是ThisParam(基类),而不是Param1或Param2,所以在我的示例的最后一行中,编译器希望使用的参数类型是该类型。我仍然无法让它接受Param1或Param2作为参数……或者可能是泛型参数。如果
ChildClass
ChildClass(Of T)
其中T是
Param1
Param2
,则可以在那里省去一个或多个类。这个问题相当抽象,可以确定你在追求什么。具有不同参数的方法不会覆盖基方法。它不能,没有办法通过对基类的引用来调用它。你需要在设计中考虑这个问题。