我不太清楚如何解释这个(这就是为什么标题有点奇怪)但我会有一个去.基本上我正在做一些面向对象的设计,我想表示各种不同类型的对象,每个对象都可以执行各种操作.一个示例可能会有所帮助:诸如可以具有删除,重命名和打开操作的文件以及可以运行,关闭,卸载和移动到其他监视器操作的应用程序.
我的第一个想法是使用一个接口(IAction)并让我所有的类用于不同类型的对象实现该接口,但这不起作用,因为每个对象将具有接口将不知道的不同方法.
然后出现的问题是,如果它们都有不同的方法,那么方法实际上会被调用 - 因为在运行时,不可能知道哪些对象具有哪些方法.这是另一个问题 - 我希望每个对象能够生成它所拥有的方法列表,然后让我调用它们中的任何一个.
这需要用反射来完成吗?我很确定它不能用标准接口完成 - 但我对所有这些OOP设计都有点新意,所以我不完全确定.
罗宾 - 我假设您这样做是为了为用户提供这些对象的"通用"接口.我在之前的项目中做了类似的事情,并在我之前发布的答案中记录了我最终得到的UI .
要回答你的具体问题,你应该在这里做一点小心,因为你可能正在进入宇航员建筑领域(不是一件好事).如果每个对象的接口自然不重叠,强制它们通过奇怪的阴谋共享一个概念界面,最终会让用户感到困惑.您可以通过实现为非常广泛的概念类别调用"足够接近"函数的接口来解决此问题(例如,文件和应用程序都是"已打开"但每个结果都不同).您还可以使用反射在需要显示可用选项的位置发现有关对象的更多信息.因此,你可以做到.问题是,你应该这样做吗?