In pratica sto cercando di implementare un modello di strategia, ma voglio passare diversi parametri all'implementazione delle "interfacce" (che ereditano dallo stesso oggetto) e non so se questo è possibile. Forse sto scegliendo il modello sbagliato, ottengo un errore simile alSchema di strategia con diversi parametri nell'interfaccia (C#)
'StrategyA' non implementa ereditato membro astratto 'DoSomething void (BaseObject)'
con il codice qui sotto:
abstract class Strategy
{
public abstract void DoSomething(BaseObject object);
}
class StrategyA : Strategy
{
public override void DoSomething(ObjectA objectA)
{
// . . .
}
}
class StrategyB : Strategy
{
public override void DoSomething(ObjectB objectB)
{
// . . .
}
}
abstract class BaseObject
{
}
class ObjectA : BaseObject
{
// add to BaseObject
}
class ObjectB : BaseObject
{
// add to BaseObject
}
class Context
{
private Strategy _strategy;
// Constructor
public Context(Strategy strategy)
{
this._strategy = strategy;
}
// i may lose addtions to BaseObject doing this "downcasting" anyways?
public void ContextInterface(BaseObject obj)
{
_strategy.DoSomething(obj);
}
}
+1 uno scenario così comune, che ho visto implementazioni in cui obj continua a crescere ... –
utilizzare le interfacce, invece di classi esempio interfaccia pubblica { vuoto DoSomething (oggetto BaseObject); } Quindi la strategia eredita quell'interfaccia. Base il tuo SP attorno all'interfaccia o un intefaccia IStrategy che eredita da questa interfaccia.utilizzare BTW DIP per iniezione con un IoC come Ninject – GregJF