2015-05-26 2 views
8

Ho notato che quei metodi dell'interfaccia ISupportInitialize sono utilizzati da Designer per supportare l'ottimizzazione, per garantire l'atomicità dell'inizializzazione dei controlli e per impedire qualsiasi azione sui controlli durante inizializzazione. Le mie domande sono:Il ruolo dei metodi BeginInit() e EndInit() in Designer

  1. In che modo aiutano Designer a ottimizzare l'inizializzazione dei controlli?
  2. Perché garantire l'atomizzazione dell'inizializzazione?
  3. C'è qualche ragionevole esempio quando utilizzarli nel codice non generato da Designer?

risposta

0

Per definizione Designer consente di creare controlli in modalità visiva, il codice appropriato per inizializzare i controlli viene quindi generato da Visual Studio.

L'inizializzazione viene eseguita in un unico punto per evitare qualsiasi problema di riferimento null più avanti nel codice. Ti aspetti davvero tutti i controlli già creati quando usi il loro riferimento.

È perfettamente possibile creare l'inizializzazione dei controlli se ad esempio si desidera creare dinamicamente l'interfaccia in base a un costruttore specifico.

5

Non ha nulla a che fare con l'ottimizzazione. ISupportInitialize è un'interfaccia necessaria quando il controllo è sensibile all'ordine in cui vengono assegnate le proprietà. Non c'è modo di influenzare l'ordine in cui il designer le assegna, lo fa in ordine alfabetico.

In genere si imposta un bool variabile a true nel metodo BeginInit(), si prova questo nei setter di proprietà e non fare nulla quando si è impostato. Il tuo metodo EndInit() rende quindi validi i valori della proprietà.

Potete vedere un buon esempio di questo nel ErrorProvider component. Si noti come utilizza i metodi per rinviare l'associazione dei dati. Il PictureBox control è un altro buon esempio, lo utilizza per rinviare il download delle immagini. TrackBar è un altro esempio, lo utilizza per garantire che la proprietà Value sia tra minima e massima. Etcetera, l'origine di .NET Framework è spesso un ottimo sito per vedere come i tipi .NET vengono utilizzati nella pratica.

+0

Quindi stai dicendo che 'BeginInit()' e 'EndInit()' stanno mettendo le proprietà in ordine alfabetico in Designer? In che modo l'ordine delle proprietà potrebbe influire su un controllo? –

+0

No, l'hai perso per un miglio. Non ho idea di come spiegarlo meglio o di dare più esempi di utilizzo. Basta lasciarlo sullo scaffale, scoprirai perché ne hai bisogno prima o poi. –