2012-09-06 16 views
5
class Base {} 
class ClassA : Base {} 
class ClassB : Base {} 
public static class ExtensionFunctions 
{ 
    public static bool DoSomething(this Base lhs, Base rhs) 
    { 
     return lhs.DoSomethingElse(rhs); 
    } 

    public static bool DoSomethingElse(this Base lhs, Base rhs) { return true; } 
    public static bool DoSomethingElse(this ClassA lhs, ClassA rhs) { return false; } 
    public static bool DoSomethingElse(this ClassA lhs, ClassB rhs) { return false; } 
    public static bool DoSomethingElse(this ClassB lhs, ClassA rhs) { return false; } 
    public static bool DoSomethingElse(this ClassB lhs, ClassB rhs) { return false; } 
} 

Dado un bloque de código anterior en realidad no hacer nada más que llamar al primer método DoSomethingElse, lo que sería un enfoque inteligente para tener la llamada al método correcto basado en el tipo real de los parámetros pasados ​​a el método DoSomething?C# una resolución mejorada de sobrecarga Método

¿Hay alguna manera de obtener la llamada al método resuelta en el tiempo de ejecución, o tengo que ir con un estilo de resolución de código "si tipo de letra"?

Respuesta

4

Usted puede utilizar la palabra clave dynamic:

public static bool DoSomething(this Base lhs, Base rhs) 
{ 
    return DoSomethingElse((dynamic)lhs, (dynamic)rhs); 
} 
Cuestiones relacionadas