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

时间:2012-03-17 20:46:05

标签: c# polymorphism derived-class

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

    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);

但这也不起作用。

1 个答案:

答案 0 :(得分:2)

像这样定义你的基类

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);
}