【问题标题】:Call class and method from two strings从两个字符串调用类和方法
【发布时间】:2014-01-03 23:41:53
【问题描述】:

我有一个 WPF 应用程序,它有两个组合框,一个是我称之为 FileType 的组合框,一个是 Actions(添加、编辑、删除等)。每个FileType 都有一个对应的类。例如,如果选择了FileTypeA 并且操作是Add,那么我想要做的事情是:

void myMethod(string FileType, string Action)
{
    //using reflection find class from the FileType string, and call method Action 
    var x = new FileTypeA();
    x.Add();
}

如果用户选择FileTypeBDelete,则创建的对象和调用的方法将相应更改。我认为这可能使用反射,但我试图找出是否有更好的方法使用泛型类?因为所有这些FileType 类都非常相似。

【问题讨论】:

  • 想想接口和工厂。
  • @RoyDictus 我知道如何实现工厂以返回正确的对象,但我将如何使用它来调用该方法?你能指出我正确的方向吗?
  • 你不使用工厂调用方法,你只定义一个接口,比如说IFileType,它定义了所有的Action,然后当你有一个IFileType的实例时,你可以调用它的Add方法等
  • @RoyDictus 是的,但我想完全摆脱 if/else 语句。但我认为答案是行动工厂?

标签: c# wpf generics reflection architecture


【解决方案1】:

尝试使用基本方法 Add、Delete、Save 创建一个接口 IFileType 在所有文件类型类(例如 DocFile、PdfFile 等)上实现此接口。

将 List 绑定到 ComboBox 并使用其选定的 Item 对象将其转换为 IFileType 并通过接口(删除/保存)调用其方法而不进行任何反射。

我建议使用 MVVM 模式,以便您可以轻松创建层分离并享受 OOP 的好处。

【讨论】:

  • 是的,我已经在使用 MVVM。但是您是说可以将组合框选中的项目直接投射到对象中吗?
  • 是的,您可以将所选项目转换为您的类对象并通过其接口引用其方法。
  • 在绑定相关问题上查看此线程stackoverflow.com/questions/663881/…
【解决方案2】:

如果您的目标是根据 ComboBox 中选择的选项为项目调用某个操作,请熟悉 delegates。然后使用将选项集合(包括委托)绑定到 ComboBox 的方法

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-23
    • 1970-01-01
    • 2016-05-15
    • 1970-01-01
    相关资源
    最近更新 更多