【发布时间】:2012-01-24 18:00:48
【问题描述】:
我有以下操作:
abstract class AAction
{}
class BlueAction: AAction
{
void Foo1(){// do stuff}
void Foo2(){// do stuff}
}
以及应该包含动作的插件:
class APlugin
{
AAction _action;
APlugin(AAction action)
{
_action = action;
}
}
class BluePlugin: APlugin
{
BluePlugin(): base(new BlueAction());
{
}
voif Foo()
{
// do stuff with BlueAction's methods
((BlueAction)_action).Foo1();
((BlueAction)_action).Foo2();
}
}
我正在尝试将此设计与设计模式相匹配,但没有成功。
我只想强制APlugin 的派生类拥有AAction
我可以这样做:
BlueAction act = (BlueAction)_action;
act.Foo1();
act.Foo2();
使用泛型(如建议的那样)不允许我拥有我真正需要的 APlugins 列表。
但这对我来说是不行的。有什么想法吗?
【问题讨论】:
-
我想也许你希望
Foo1和Foo2成为基类的抽象成员?那么您的呼叫站点将不需要投射,_action.Foo1(); -
代码
class BlueAction: AAction { void Foo1(); void Foo2(); }没有编译..... -
@asawyer 不,我希望 BlueAction 有自己的方法
-
@RoyiNamir 该代码仅用于演示,它不是从我的项目中复制的。我的问题是关于设计而不是发现错误:)
标签: c# design-patterns inheritance