基于可能属于几种不同类型之一的对象调用重载方法的理想方式是什么

本文关键字:调用 对象 重载 方法 是什么 方式 理想 同类型 属于 于可能 几种 | 更新日期: 2023-09-27 18:24:41

对于我的WPF视图,我有几个对象实现了用于显示目的的单个接口。当选择一个时,我想根据视图上选择的类型和选项调用某个方法。我已经为每种类型的对象提供了Overloads。我尝试使用一个通用方法,但它证明了对象之间的差异太大,无法使用。

出于可维护性的目的,我试图避免使用大型if语句进行控制耦合。

我使用单一接口是否出错,或者有一种有趣的可维护方法吗

我有一个数据网格,其中包含IDisplayableObject的集合。

public interface IDisplayableObject
{
    string Name { get; set; }
    string ID { get; set; }
}

现在,我选第一个答案。

 public void ExportDashed(string path, IDisplayableObject folder)
    {
        if (folder is TestFolder)
        {
            IndentationTraverse(folder as TestFolder);
        }
        else if (folder is UserStory)
        {
            IndentationTraverse(folder as UserStory);
        }
        _excelManipulator.Save(path);
    }

我想避免if语句。对于这种情况,我通常使用映射到Action的字典,但我也有的另一种方法

    public void ExportShiftingColumns(string path, IDisplayableObject folder)
    {
        if (folder is TestFolder)
        {
            ColumnShiftTraverse(folder as TestFolder);
        }
        else if (folder is UserStory)
        {
            ColumnShiftTraverse(folder as UserStory);
        }
        _excelManipulator.Save(path);
    }

因此,我需要进行操作,导出虚线或导出移位列,然后我需要决定导出哪种类型。

您可以从代码中看到,重复不是一件好事,我希望尽可能避免它。对于这个应用程序来说,这没什么大不了的,但更多的是为了我的个人学习

基于可能属于几种不同类型之一的对象调用重载方法的理想方式是什么

也许不是最优雅的解决方案,但请尝试

if ( myObject as IInterface1 != null )
    ((IInterface1)myObject).Method1();
else if ( myObject as IInterface2 != null )
    ((IInterface2)myObject).Method2();

等等…