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; } 
} 

Dato il codice blocco sopra in realtà non fare nulla, ma chiamare il primo metodo DoSomethingElse, quale sarebbe un approccio intelligente per avere la chiamata di metodo corretto in base al tipo reale dei parametri passati il metodo DoSomething?C# migliorato metodo di risoluzione di sovraccarico

C'è un modo per ottenere la chiamata al metodo risolta in fase di esecuzione oppure devo seguire uno stile di tipo "if typeof" per la risoluzione del codice?

risposta

4

È possibile utilizzare la parola chiave dynamic:

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