Ody*_*dys 3 c# inheritance design-patterns
我有以下行动:
abstract class AAction
{}
class BlueAction: AAction
{
void Foo1(){// do stuff}
void Foo2(){// do stuff}
}
Run Code Online (Sandbox Code Playgroud)
以及应包含操作的插件:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
我试图将这种设计融入设计模式,没有运气.
我只想要强制派生类APlugin
来拥有一个AAction
我可以做到这一点:
BlueAction act = (BlueAction)_action;
act.Foo1();
act.Foo2();
Run Code Online (Sandbox Code Playgroud)
使用泛型(如建议)不允许我有一个APlugins列表,这是我真正需要的.
但这对我来说是不行的.有任何想法吗?
Mag*_*tLU 14
使用泛型:
class APlugin<TAction> where TAction : AAction
{
TAction _action;
APlugin(TAction action)
{
_action = action;
}
}
class BluePlugin: APlugin<BlueAction>
{
BluePlugin(): base(new BlueAction());
{
}
void Foo()
{
// do stuff with BlueAction's methods
_action.Foo1();
_action.Foo2();
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
149 次 |
最近记录: |