2010-04-09 8 views
8

Ho una domanda riguardante un problema con L2S, DataContext generati automaticamente e l'uso di classi parziali. Ho astratto il mio datacontext e per ogni tabella che utilizzo, sto implementando una classe con un'interfaccia. Nel codice qui sotto puoi vedere che ho l'interfaccia e due classi parziali. La prima classe è proprio lì per assicurarsi che la classe nel datacontext generato automaticamente erediti l'interfaccia. L'altra classe autogenerata si assicura che il metodo di Interface sia implementato.Problema con l'implementazione dell'interfaccia in classi parziali

namespace PartialProject.objects 
{ 

public interface Interface 
{ 
    Interface Instance { get; } 
} 

//To make sure the autogenerated code inherits Interface 
public partial class Class : Interface { } 

//This is autogenerated 
public partial class Class 
{ 
    public Class Instance 
    { 
     get 
     { 
      return this.Instance; 
     } 
    } 
} 

} 

Ora il mio problema è che il metodo implementato nella classe generato automaticamente dà il seguente errore: -> Proprietà 'grado' non può implementare proprietà dall'interfaccia 'PartialProject.objects.Interface'. Il tipo dovrebbe essere "PartialProjects.objects.Interface". < -

Qualche idea su come risolvere questo errore? Tieni presente che non riesco a modificare nulla nel codice generato automaticamente.

Grazie in anticipo!

risposta

12

si può risolvere questo implementando il interfaccia esplicita:

namespace PartialProject.objects 
{ 
    public interface Interface 
    { 
    Interface Instance { get; } 
    } 

    //To make sure the autogenerated code inherits Interface 
    public partial class Class : Interface 
    { 
    Interface Interface.Instance 
    { 
     get 
     { 
     return Instance; 
     } 
    } 
    } 

    //This is autogenerated 
    public partial class Class 
    { 
    public Class Instance 
    { 
     get 
     { 
      return this.Instance; 
     } 
    } 
    } 
} 
+0

Questo è esattamente quello che stavo cercando:] Grazie mille! Funziona alla grande – Bas

+1

Votato. Grazie per la bella soluzione. Ho quasi "rotto" la testa cercando di aggirare le limitazioni imposte dalle interfacce. –

+0

Nel caso in cui qualcuno esegua il seguente errore dopo aver implementato la soluzione sopra, guarda [qui] (http://stackoverflow.com/questions/2669031/compilation-error-the-modifier-public-is-not-valid-for- this-item-while-crea): il modificatore 'public' non è valido per questo elemento - in pratica rimuovi qualsiasi modificatore di accesso in quanto tali proprietà saranno forzate come private (il che ha senso quando ci pensi). – dyslexicanaboko

1

I tipi di reso non sono covarianti in C#. Come non è possibile modificare il codice generato automaticamente l'unica soluzione che vedo è quella di modificare l'interfaccia:

public interface Interface<T> 
{ 
    T Instance { get; } 
} 

e cambiare la tua classe parziale di conseguenza:

public partial class Class : Interface<Class> { } 
Problemi correlati