Независимо от того, является ли это хорошей идеей, возможно ли реализовать интерфейс, в котором исполняющая функция знает тип вызывающего объекта?
class A
{
private C;
public int doC(int input)
{
return C.DoSomething(input);
}
}
class B
{
private C;
public int doC(int input)
{
return C.DoSomething(input);
}
}
class C
{
public int DoSomething(int input)
{
if(GetType(CallingObject) == A)
{
return input + 1;
}
else if(GetType(CallingObject) == B)
{
return input + 2;
}
else
{
return input + 3;
}
}
}
Мне кажется, что это плохая практика кодирования (потому что параметры не меняются, а вывод будет), но кроме этого возможно ли это?
Я нахожусь в ситуации, когда я хочу, чтобы несколько определенных типов могли вызывать определенную функцию, но я не могу исключить доступ к этой функции.
Я думал о наличии параметра "type"
DoSomething(int input, Type callingobject)
Но нет гарантии, что вызывающий объект будет использовать GetType (this), в отличие от GetType (B), чтобы подделать B независимо от их собственного типа.
Будет ли это так же просто (относительно просто), как изучение стека вызовов?
РЕДАКТИРОВАТЬ
Пожалуйста, проголосуйте за ответ ДжаредПара (если хотите), а также за Джона Феминеллу. Я не мог пометить оба ответа как принятые, и я принял ответ Джона Феминеллы, потому что это именно то, о чем я просил, а не ответ Джареда, который привел к решению, которое я ранее не рассматривал.