当前位置:  开发笔记 > 编程语言 > 正文

多态性和显式铸造

如何解决《多态性和显式铸造》经验,为你挑选了1个好方法。

我有以下架构(类比很糟糕,但W/E).

在此输入图像描述

program其他逻辑类中,我有很多方法使用finger(MonkeyFinger)的特定类型.这意味着我必须明确地转换所有那些testMethods.

是否有任何设计模式/解决方案可以避免显式演员表?

编辑代码:

Monkey govi = new Monkey(...)
Program test = new Program()
test.testFinger1((MonkeyFinger) govi.GetHand.getFinger)

...



1> Rob..:

你可以尝试这样的事情:

public class Animal where TFingerType : IFinger
{
    Hand GetHand() 
    {
        //... Do something
    }
}

public class Monkey : Animal { }
public class Hand where TFingerType : IFinger
{

}
public interface IFinger
{

}
public class MonkeyFinger : IFinger {
}

至少在你给出的例子中,Monkey返回包含HumanFingers 的手是没有意义的.手本身实际上由它具有什么类型的手指来定义.

然后你的代码变成:

Monkey govi = new Monkey(...)
Program test = new Program()
test.testFinger1(govi.GetHand.getFinger() /* getFinger here returns a MonkeyFinger */)

请注意,手指仍然是IFingers,并且可以在该上下文中使用,但是这种方法还提供具体类型的手指.

推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有