2012-02-15 13 views
0

对于我的WPF视图,我有几个实现单个界面用于显示的对象。当选择一个时,我想根据视图上选择的类型和选项调用某种方法。我已经为每种类型的对象提供了重载。我试图使用一个通用的方法,但它证明了这些对象太不同了,无法使用。基于可能是几种不同类型之一的对象调用重载方法的理想方法是什么?

我想尽量避免控制耦合与大if语句的可维护性目的。

我使用奇异接口出错了,还是有一个有趣的可维护的方法来做到这一点?

我有一个datagrid包含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语句。对于这种情况,我通常使用映射到一个动作一个字典,但我也有

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

另一种方法,所以我需要做的动作,出口虚线或出口移列,然后我需要决定键入以导出。

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

+1

你能张贴接口的一个小例子,你要如何从你的类调用它呢? – 2012-02-15 23:19:25

回答

1

也许不是最完美的解决方案,但尝试

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

等等...

+0

这就是我想要避免的,但是谢谢。 – tylerjgarland 2012-02-16 20:46:22

+0

也许我错了想法,你正在努力实现..作为@Trevor Pilley建议,你可以发布你的代码的例子吗? – sotn0r 2012-02-20 10:54:13

+0

我可以这么做。 – tylerjgarland 2012-02-21 22:40:42

相关问题