c# - propiedades - que es un metodo en programacion
dos clases con métodos y propiedades comunes (3)
Esta pregunta ya tiene una respuesta aquí:
- ¿Qué es Interface Duck Typing? 4 respuestas
Tengo dos clases.
Clase A:
class A() {
public void QQ() {}
public void WW() {}
}
Y clase B:
class B() {
public void QQ() {}
public void WW() {}
}
No comparten la misma interfaz o clase abstracta. A y B tienen dos jerarquías distintas y no puedo cambiar eso en este momento.
Quiero escribir un solo procedimiento que funcione para A y B y use los métodos QQ y WW.
¿Puedo hacer eso? ¿Puedes sugerir algún documento que pueda estudiar?
Tanques
¿No puedes hacer una clase para padres y poner estos métodos en ella y luego dejar que A y B hereden de esa clase?
Puedes verificar si el objeto es del tipo específico, luego lanzarlo e invocar su método:
void InvokeQQ(object o){
if(o is A)
(o as A).QQ();
if(o is B)
(o as B).QQ();
}
En C # 6 puedes simplificar esto para
void InvokeQQ(object o){
(o as A)?.QQ();
(o as B)?.QQ();
}
Esto se llama Duck Typing .
Puedes usar dinámicas
void Foo(dynamic dy)
{
dy.QQ();
}
También puedes usar la reflexión. ( referencia )
public static void CallQQ(object o)
{
var qq = o.GetType().GetMethod("QQ");
if (qq != null)
qq.Invoke(o, new object[] { });
else
throw new InvalidOperationException("method not found");
}