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