2011-10-31 9 views
6

Uso VisualStudio 2008 e 2010, entrambi con ReSharper, e quando provo a cercare gli usi di un determinato metodo ottengo nessun risultato, nonostante il metodo sia ereditato e quindi chiamato attraverso un'interfaccia. Cosa c'è che non va? È un bug VS/ReSharper? Vedere l'esempio qui sotto:C# - Impossibile trovare l'utilizzo del metodo se ereditato e utilizzato tramite un'interfaccia implementata dalla sottoclasse

using System; 
namespace UsageNotFound 
{ 
    interface MyInterface 
    { 
     void Hello(); 
    } 

    class SuperClass 
    { 
     public void Hello() //NOTE: VS 2008/2010 (with resharper) 
seems unable to find usages on this!!! 
     { 
      Console.WriteLine("Hi!"); 
     } 
    } 

    class SubClass : SuperClass, MyInterface 
    { 
     public static MyInterface GetInstance() 
     { 
      return new SubClass(); 
     } 
    } 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      SubClass.GetInstance().Hello(); 
     } 
    } 
} 

Grazie, Fabrizio

+0

funziona per me (VS 2010 + ReSharper 6) e si ottiene l'intellisense corretta e compila bene. –

+0

@peer. Non è necessario avere un modificatore di accesso – ChrisBint

+0

verificato che non funziona neanche per me. Con Resharper 5.1. – Ray

risposta

1

Probabilmente perché il vostro SuperClass non implementa l'interfaccia. Ciò potrebbe causare un problema per ReSharper. Prova:

class SuperClass : MyInterface 
    { 
     public void Hello() 
     { 
      Console.WriteLine("Hi!"); 
     } 
    } 
+1

Anche se sono d'accordo sul fatto che la classe base debba implementare l'interfaccia, quindi sta creando una funzione 'Hello()' non è necessario risolvere il suo problema . Il suo problema potrebbe essere coinvolto con la VERSIONE di ReSharper? –

+0

Penso che la superclasse non abbia concettualmente bisogno di implementare l'interfaccia. La superclasse potrebbe probabilmente anche essere in un progetto separato (o una libreria) del tutto, ed essere completamente disaccoppiata dall'interfaccia. – Fabrizio

0

E 'tutto a che fare con l'ordine in cui SubClass eredita il metodo Hello() da SuperClass e MyInterface.

Mi sorprende che non venga visualizzato un avviso che lo SubClass.Hello() (dall'implementazione della definizione dell'interfaccia) nasconderà lo SuperClass.Hello().

+0

Non penso ci sia alcun nascondiglio: l'implementazione deve essere esplicitamente fornita, ed è fornita nella classe base. C'è solo un'implementazione di quel metodo in quel campione. – Fabrizio

Problemi correlati