Independientemente de si esta es una buena idea o no, ¿es posible implementar una interfaz donde la función ejecutora conozca el tipo de objeto que realiza la llamada?Determinar el tipo de objeto llamante en 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;
}
}
}
Me parece que esta es una práctica mala codificación (ya que los parámetros no cambian, pero la salida haría) pero aparte de eso es posible?
Estoy en una situación en la que quiero que algunos tipos específicos puedan llamar a cierta función, pero no puedo excluir el acceso a la función. pensé en tener un parámetro "tipo"
DoSomething(int input, Type callingobject)
Pero no hay garantía de que el objeto que llama usaría GetType (este), en contraposición a GetType (B) para que simule un B con independencia de su propio tipo.
¿Sería esto tan simple (relativamente simple) como examinar la pila de llamadas?
EDITAR
Por favor, vote a la respuesta de JaredPar (si lo desea), así como John Feminella de. No pude marcar ambas respuestas como aceptadas, y acepté la respuesta de John Feminella porque es específicamente lo que pedí, a diferencia de la respuesta de Jared, que planteó una solución que no había considerado anteriormente.
podría darle un poco más de fondo? Porque ahora no veo por qué no implementan métodos separados en C. Algo como C.DoSometingA y C.DoSomethingB. O incluso mejor: pero el comportamiento en las clases A y B. –
La versión corta es que terminaría teniendo 30 o 40 funciones idénticas que simplemente estaban desactivadas en una o dos líneas. – DevinB
@devinb: Ver la edición que hice en mi publicación a continuación. Es posible que desee considerar abrir una pregunta diferente. –