如何在运行时确定派生类并允许调用多态方法

本文关键字:许调用 调用 方法 多态 运行时 派生 | 更新日期: 2023-09-27 18:28:19

我有一个函数,它接受两个基类参数。在这个函数中,我希望在许多派生类上测试这些参数的类型,然后调用多态函数。请参阅下面查看我的第一次尝试,但它不会编译。

    public static double Intersect(baseClass s0, baseClass s1)
    {
          if (s1 is derivedClassB) return (s0 as derivedClassA).PolyMethod((derivedClassB)s1);
          else if (s1 is derivedClassC) return (s0 as  derivedClassA).PolyMethod((derivedClassC)s1);
                    else return 0.0;
    }

我想我可以用之类的东西

Type dType = s0.GetType();
(s0 as dType).PolyMethod(derivedClassB) s1);

但这也不起作用。

如何在运行时确定派生类并允许调用多态方法

像这样定义基类

public abstract BaseClass
{
    public abstract double PolyMethod(BaseClass s);
}

定义类似的派生类

public DerviedClassX : BaseClass
{
    public override double PolyMethod(BaseClass s)
    {
        return 0.0; // Return something usefull here.
    }
}

然后你的方法可以像这个一样简化

public static double Intersect(BaseClass s0, BaseClass s1)
{
    return s0.PolyMethod(s1);
}