I have a very simple scenario : a "person" can be a "customer" or an "employee" of a company.
A "person" can be called by phone with the "Call" method.
Depending on which role the "person" plays in the context of the call, e.g. the announcement of a new product or the announcement of a change in organization, we should either use the phone number provided for the "customer" role or the one provided for the "employee" role.
Here is a sum-up of the situation :
interface IPerson
{
void Call();
}
interface ICustomer : IPerson
{
}
interface IEmployee : IPerson
{
}
class Both : ICustomer, IEmployee
{
void ICustomer.Call()
{
// Call to external phone number
}
void IEmployee.Call()
{
// Call to internal phone number
}
}
But this code doe not compile and produces the errors :
error CS0539: 'ICustomer.Call' in explicit interface declaration is not a member of interface
error CS0539: 'IEmployee.Call' in explicit interface declaration is not a member of interface
error CS0535: 'Both' does not implement interface member 'IPerson.Call()'
Does this scenario has any chance to be implementable in C# in a different way or will I have to find another design ?
If so what alternatives do you propose ?
Thanks in advance for your help.
Your objective does not make sense.
Neither ICustomer
nor IEmployee
define a Call()
method; they just inherit the method from the same interface. Your Both
class implements the same interface twice.
Any possible Call
call will always call IPerson.Call
; there are no IL instructions that will specifically call ICustomer.Call
or IEmployee.Call
.
You may be able to solve this by explicitly redefining Call
in both child interfaces, but I highly recommend that you just give them different names.