Indipendentemente dal fatto che questa sia o meno una buona idea, è possibile implementare un'interfaccia in cui la funzione di esecuzione è a conoscenza del tipo dell'oggetto chiamante?Determinazione del tipo di oggetto chiamante in C#
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;
}
}
}
Mi sembra come questa è una pratica di codifica cattiva (perché i parametri non cambiano, ma l'uscita sarebbe) ma a parte questo è possibile?
Sono in una situazione in cui vorrei che alcuni tipi specifici potessero chiamare una determinata funzione, ma non posso escludere l'accesso alla funzione. ho pensato di avere un parametro "tipo"
DoSomething(int input, Type callingobject)
Ma non c'è alcuna garanzia che l'oggetto chiamante userebbe GetType (questo), al contrario di GetType (B) per lo spoofing di un B indipendentemente dal loro tipo.
Questo sarebbe semplice (relativamente semplice) come esaminare il callstack?
EDIT
si prega di votare fino risposta di JaredPar (se si vuole), così come John Feminella di. Non sono riuscito a contrassegnare entrambe le risposte come accettate e ho accettato la risposta di John Feminella perché è specificamente ciò che ho chiesto, a differenza della risposta di Jared che ha sollevato una soluzione che non avevo precedentemente preso in considerazione.
Potrebbe dare un po 'più di fondo? Perché ora non vedo perché non si implementi solo metodi separati in C. Qualcosa come C.DoSometingA e C.DoSomethingB. O ancora meglio: ma il comportamento nelle classi A & B. –
La versione breve è che avrei finito per avere 30 o 40 funzioni identiche che erano semplicemente fuori da una o due linee. – DevinB
@devinb: vedere la modifica che ho apportato al mio post qui sotto. Puoi prendere in considerazione l'idea di aprire una domanda diversa. –