如何从函数中调用重载方法并在c#中传递不同的参数类型

时间:2016-09-06 13:49:59

标签: c# .net polymorphism

我有两个重载方法如下:

Render(PDFTable table)
Render(PDFText text)

我必须从for..each循环中的另一个方法调用这些方法,并传递如下参数:

foreach (var item in sectionPDF.sectionElements)
{
    if (item.GetType().Equals(typeof(PDFTable)))
    {
        Render((PDFTable)item);
    }
    else if (item.GetType().Equals(typeof(PDFText)))
    {
        Render((PDFText)item);
    }
}

我想知道,如果有任何方法可以删除if..else语句并动态解析类型?提前谢谢。

3 个答案:

答案 0 :(得分:1)

不,没有。 C#不支持基于参数类型的虚拟调度。过载分辨率纯粹是编译时的问题。因此,您必须自己做出决定,无论是现在的方式,使用某种形式的决策表,使用提供决策的提供者类,还是其他适合您的软件设计。

答案 1 :(得分:1)

您可以使用dynamic。 首先声明一个这样的方法:

void RenderDispatch(dynamic item)
{
    Render(item);
}

Render((PDFTable)
Render((PDFText)

然后在foreach

foreach (var item in sectionPDF.sectionElements)
{
    RenderDispatch(item);
}

运行时要注意调用正确的覆盖。

小心 dynamic会导致性能问题。

答案 2 :(得分:0)

你可以制作你的"渲染"方法通用:

void Render<T> (T item)
{
    //your stuff here
}

然后:

foreach (var item in sectionPDF.sectionElements)
{
    Render(item);
}