if
statements) can handle this, but so can explicit interfaces in C#.First make an interface for each set of behavior you want.
interface IContextA
{
string Property { get; }
int Method(int data);
}
interface IContextB
{
string Property { get; }
int Method(int data);
}
Then create the different contexts or scenarios using the interface with the behavior you want.
static void DoStuffInContextA(IContextA example)
{
Console.WriteLine(example.Property);
Console.WriteLine(example.Method(8));
}
static void DoStuffInContextB(IContextB example)
{
Console.WriteLine(example.Property);
Console.WriteLine(example.Method(8));
}
Then create a class that implements the different behavior.
class MultiContextObject : IContextA, IContextB
{
string IContextA.Property
{
get { return "called in context a"; }
}
int IContextA.Method(int data)
{
return data + 1;
}
string IContextB.Property
{
get { return "called in context b"; }
}
int IContextB.Method(int data)
{
return data - 1;
}
}
And now you can use interfaces to select which set of behavior you want your object to use.
static void ExplicitInterfaceAsContextTest()
{
MultiContextObject example = new MultiContextObject();
DoStuffInContextA(example);
DoStuffInContextB(example);
}
I think this is neat. It won't replace state and strategy patterns, but there's probably cases where those aren't possible or where this would work better.
No comments:
Post a Comment