Независимо от того, является ли это хорошей идеей, возможно ли реализовать интерфейс, в котором исполняющая функция знает тип вызываемого объекта?
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 (это), в отличие от GetType (B), чтобы обманывать B независимо от их собственного типа.
Будет ли это так же просто (относительно просто), как проверить столбец?
EDIT
Пожалуйста, проголосуйте за ответ JaredPar (если хотите), а также Джон Фэминелла. Я не мог отметить оба ответа как принятые, и я принял ответ Джона Фэминеллы, потому что это именно то, о чем я просил, в отличие от ответа Джареда, который поднял решение, которое я раньше не рассматривал.