我有以下架构(类比很糟糕,但W/E).
在program
其他逻辑类中,我有很多方法使用finger(MonkeyFinger
)的特定类型.这意味着我必须明确地转换所有那些testMethods.
是否有任何设计模式/解决方案可以避免显式演员表?
编辑代码:
Monkey govi = new Monkey(...) Program test = new Program() test.testFinger1((MonkeyFinger) govi.GetHand.getFinger)
...
你可以尝试这样的事情:
public class Animalwhere TFingerType : IFinger { Hand GetHand() { //... Do something } } public class Monkey : Animal { } public class Hand where TFingerType : IFinger { } public interface IFinger { } public class MonkeyFinger : IFinger { }
至少在你给出的例子中,Monkey
返回包含HumanFinger
s 的手是没有意义的.手本身实际上由它具有什么类型的手指来定义.
然后你的代码变成:
Monkey govi = new Monkey(...) Program test = new Program() test.testFinger1(govi.GetHand.getFinger() /* getFinger here returns a MonkeyFinger */)
请注意,手指仍然是IFingers
,并且可以在该上下文中使用,但是这种方法还提供具体类型的手指.