2015-08-07 7 views
5

ho iniziare a utilizzare il metodo seguente raggruppamento di fare il mio codice più leggibile:Tornando se stesso in proprietà

public interface IUserMethodGroup 
{ 
    void SomeMethodOne(); 
    String SomeMethodTwo(); 
} 

//File MainClass.Users.cs 
public partial class MainClass : IUserMethodGroup 
{ 
    void IUserMethodGroup.SomeMethodOne(){ //some code } 
    String IUserMethodGroup.SomeMethodTwo(){ return "some str";} 
} 

//File MainClass.cs 
public partial class MainClass 
{ 
    //HOW ABOUT PERFORMANCE? 
    public IUserMethodGroup UserHandle {get { return this; } }  
} 

Fa ha grande impatto sulle prestazioni?

Modifica 1

Questo mi permette di farlo:

class ConsumerClass 
{ 
    public void Method() 
    { 
     MainClass mc = new MainClass(); 

     mc.UserHandle.SomeMethodOne(); 

     //@ vc 74: 
     //Interface has to be explicitly, otherwise it will be: 
     ms.SomeMethodOne(); //grouping lost... 
    } 
} 

@adelphus: Considerare Ho 5 proprietà simili (gruppi metodo). Ogni volta che voglio usare un metodo del gruppo, chiedo alla classe di restituire se stessa. È molto più lento rispetto all'implementazione senza gruppi?

+3

Rispetto a cosa ...? – adelphus

+6

Qualunque impatto può avere o non avere, è quasi certamente trascurabile rispetto ai veri colli di bottiglia della tua app –

+1

Se la tua domanda è "le classi parziali creano problemi di prestazioni?" allora la risposta è no, il framework non ha idea che la tua classe sia parziale. È solo un compilatore C# quindi le prestazioni saranno simili a quelle di una classe non parziale. –

risposta

1

Ogni volta che voglio utilizzare un metodo del gruppo, chiedo alla classe di restituire se stessa. È molto più lento rispetto all'implementazione senza gruppi?

No. La restituzione di this in una proprietà di sola lettura deve essere solo una riga del codice IL. In effetti, è possibile che venga persino sottolineato dall'ottimizzatore JIT.

La domanda più grande è perché avete così tanti metodi in una classe? Avere così tanti metodi che devono essere "organizzati" da implementazioni esplicite dell'interfaccia puzza di avere una classe che sta facendo troppo.

Una cosa questo disegno non permette è per voi di avere diverse classi che implementano i diversi "gruppi". La tua singola classe diventa quindi un aggregatore che combina le funzionalità di diverse interfacce in una singola classe.

+0

Grazie per la risposta. Lo sto usando ad esempio nell'implementazione di DbContext. Raggruppamento di set comuni: Indirizzo (strade, città, codici postali, regioni, distretti), account (gruppi, utenti, ruoli ...) ecc. È più conveniente per me. – arche89