Perché il codice dietro una classe parziale per le pagine aspx?Perché i file code-behind di aspx sono dichiarati come classi parziali?
risposta
Vi rimando a questo MSDN Page (pagina ASP.NET classe Panoramica).
Quando la pagina viene compilata, ASP.NET genera una classe parziale in base al file aspx ; questa classe è una classe parziale del file di classe code-behind. Il file di classe parziale generato contiene dichiarazioni per i controlli della pagina. Questa classe parziale abilita lo file code-behind da utilizzare come parte di una classe completa senza richiedendo di dichiarare esplicitamente i comandi .
vedere questa tabella:
alt text http://img30.imageshack.us/img30/7692/msdnchart.gif
In questo modo si dispone di una classe che contiene la logica e una classe che contiene roba designer. Al momento della compilazione è generato nel suo complesso.
Questo è uno di quei grafici "lascia fare un grafico da qualcosa che non dovrebbe essere un grafico". – womp
"Il modello di ereditarietà per le pagine code-behind è leggermente più complesso di quello per le pagine a file singolo" Sezione in quell'articolo MSDN è stato molto utile per capire meglio questo grafico –
Perché ci sono altre parti del (roba designer) di classe che è nascosto da parte dello sviluppatore
Per esempio, al posto di questo
public MyBasePage : System.Web.UI.Page
{
...
protected System.Web.UI.Label lblName;
protected void Page_Load(object sender, EventArgs e)
{
}
...
}
ASP.NET crea tali dichiarazioni in diversi file fisici, lasciando questo
public partial class MyBasePage : System.Web.UI.Page
{
...
protected void Page_Load(object sender, EventArgs e)
{
}
...
}
Maggiori informazioni:
potresti elaborare? è simile al file del designer winforms? – andrewWinn
@andrewWinn - sì, è equivoco al file di progettazione winforms - in ASP.NET 1.1 ci sarebbero tutte le dichiarazioni di controllo nella parte superiore del code-behind, e quindi una regione compressa nella parte inferiore commentata lungo le linee di " Designer generato, non modificare "in cui sono stati collegati tutti gli eventi. –
@jaun, il link che hai fornito non funziona. – ShaileshDev
La dichiarazione parziale consente di scrivere il codice in altri file: è sufficiente inserirlo nello stesso spazio dei nomi e denominare la classe allo stesso modo e verranno trattati come se si trovassero nello stesso file. È fantastico per aggiungere funzionalità ai file generati. Lo uso più frequentemente per aggiungere funzioni/proprietà ai miei oggetti LinqToSql.
Inoltre aiuta a mantenere tutto il codice brutto generato da te e modificandolo accidentalmente. Devi essere molto più deciso ora per modificarlo .... :) – klabranche
L'altro motivo per i file parziali è quello di gestire il caso in cui parte della definizione di classe è generata da uno strumento (e può essere rigenerata ad un certo punto) e il resto della classe è implementato dall'utente.
In questi casi, il non utilizzo di una classe parziale comporterebbe la sovrascrittura del codice o il processo di generazione che ha difficoltà a svolgere il proprio lavoro (se è possibile farlo).
Con le classi parziali, il codice generato può essere facilmente rigenerato senza toccare il codice.
Un altro buon esempio di questo è quando si utilizzano le classi DataContext per LINQ-to-SQL: le cose veramente intelligenti vengono generate in un set di file di classi parziali e si possono fornire implementazioni - per la convalida ecc. - nell'altro parziale classe, al sicuro sapendo che la rigenerazione non distruggerà il tuo lavoro.
Aspx.cs utilizza la classe PARZIALE poiché i controlli (ad esempio TextBox, GridView) a cui si accede in questa classe sono dichiarati nel file .Aspx (ad es.Fisicamente Un altro file) in modo che una classe contenga la dichiarazione di controllo (file .aspx) e un'altra logica aziendale basata sui controlli dichiarati sul file .aspx. quando vengono compilati i considerati nel loro complesso una singola classe.
- 1. Costruttori di classi parziali
- 2. Come rendere le classi parziali del controllo utente consapevoli dei controlli dichiarati nella classe base?
- 3. classi parziali java
- 4. Utilizzo di classi parziali
- 5. Classi parziali WinForm
- 6. NET classi parziali vs. Ereditarietà
- 7. Perché i metodi parziali devono essere annullati?
- 8. Perché i sindacati anonimi globali devono essere dichiarati come statici?
- 9. Come convertire automaticamente le classi VS2003 in file Designer.cs parziali?
- 10. Classi parziali in DLL separate
- 11. Utilizzo di XmlIgnore su classi parziali generate
- 12. Il file Svc funziona senza codebehind?
- 13. Perché i metodi parziali supportano ref ma non i parametri
- 14. Convenzione di denominazione per i nomi di file delle classi parziali?
- 15. Perché non posso eliminare i valori javascript dichiarati con var?
- 16. Perché i membri protetti sono consentiti nelle classi java finali?
- 17. Alcuni controlli aspx non sono riconosciuti nei file code-behind
- 18. Perché i file statici sono insicuri
- 19. Perché le classi statiche sono sigillate?
- 20. Problema con l'implementazione dell'interfaccia in classi parziali
- 21. Visual Studio - Perché i file .ASPX impiegano molto più tempo a caricarsi dei file .ASPX.CS?
- 22. C# Perché i metodi parziali usano ref, ma non out?
- 23. Gli attributi di metamodello dichiarati funzionano bene MA Gli attributi di Metamodel ereditati sono NULL. Perché?
- 24. Perché le classi annidate sono "ereditate"?
- 25. Perché i tratti sono istantanei?
- 26. Come definire i baffi parziali in HTML?
- 27. Dichiarazioni parziali di non deve specificare diverse classi di base
- 28. Le dichiarazioni parziali non devono specificare diverse classi di base
- 29. Sono permessi parziali permessi in VSCode?
- 30. Perché wait() e notify() sono dichiarati nella classe Object di Java?
E dovresti modificare il titolo della domanda. Non è una domanda _stupid_. –
"Non ci sono domande stupide, solo persone stupide" - Mr. Garrison, South Park. OK, quindi non si applica qui, mi piace solo quella citazione. : D – Powerlord
L'unica domanda stupida è quella che non chiedi. – belugabob