Sto cercando di capire che cosa siano esattamente le proprietà delle dipendenze, ma quando guardo ovunque per una definizione, trovo solo "come usare" ma non "quello che è ". Immagina che ti venga chiesto un colloquio di lavoro: cos'è una proprietà di dipendenza. Quale sarebbe la tua risposta?Hai bisogno di una definizione breve e chiara per "Proprietà dipendenza"
risposta
A DependencyProperty è una proprietà il cui valore dipende (o può dipendere) da un altro sorgente (come animazione, associazione dati, stili o ereditarietà di alberi visivi). Il valore di una proprietà normale viene archiviato nell'oggetto a cui appartiene, mentre è possibile pensare a una proprietà di dipendenza come archiviata in un database da qualche parte. Questo database è essenzialmente composto da un dizionario che mappa le coppie (oggetto, proprietà) ai loro valori, insieme a una mappatura di quali proprietà dipendono da altre proprietà (ad esempio quando si modifica DataContext di un Pannello, può notificare tutto i bambini all'interno del pannello).
Quindi perché memorizzano valori di proprietà in qualche database magico da qualche parte? Ci sono alcuni motivi:
Riduce lo spazio di archiviazione. L'aggiunta di una proprietà (anche se il suo valore è null) a una classe aggiunge 4 byte (8 per un processo a 64 bit) di spazio a ogni istanza della classe. Una DependencyProperty occupa spazio solo quando un'istanza ha un valore. Ad esempio, un FrameworkElement ha dozzine di proprietà di dipendenza, molte delle quali non vengono mai assegnate ai valori. Se tutte queste proprietà fossero memorizzate nella classe, ogni istanza sarebbe di centinaia di byte. Invece ogni istanza è solo di circa 40 byte.
Abilita proprietà associate. Proprietà come
Canvas.Left
eGrid.Row
devono essere memorizzate su oggetti che non hanno mai sentito parlare diCanvas
oGrid
, quindi dove li metti? Li metti in un database da qualche parte.Abilita le modifiche alle proprietà automatiche.Immagina come implementare qualcosa come gli stili o l'ereditarietà delle proprietà (la possibilità di impostare qualcosa come un font o un contesto di dati su un elemento genitore e avere il suo valore propagarsi a tutti gli elementi figli). Avere tutto questo memorizzato in un database fa sì che il codice sia tutto in un posto invece di essere implementato separatamente per ogni oggetto e proprietà che ne ha bisogno.
"ti dà un po 'di infrastrutture per fare tutte le cose che spesso vuole fare con un normale proprietà - convalidarlo, forzarlo in un intervallo adeguato, emettere notifiche di modifica e una serie di altri aspetti. "
Convalida, coercizione e modifica le notifiche sono tutte possibili con regolari proprietà CLR e – gn22
Grazie per aver condiviso il link, personalmente l'ho trovato molto utile. –
una proprietà di dipendenza è una struttura che è sostenuto dal sistema di proprietà WPF invece che da un campo nella classe dichiarare.
Il significato di questo è che, poiché WPF possiede la proprietà, WPF può tenere in considerazione varie considerazioni durante il calcolo del valore della proprietà, ad esempio animazioni, stili e associazioni di dati. Un'altra conseguenza è che, poiché le proprietà sono gestite da WPF, non devono essere dichiarate sulle classi che concettualmente hanno lo stato: quindi, proprietà atttached, che consentono ad es. una griglia per associare lo stato specifico della griglia con oggetti non griglia.
(A proposito, ho menzionato WPF sopra perché questo è il framework principale che utilizza DP, ma Windows Workflow Foundation ha anche la nozione di proprietà di dipendenza. Quindi, per essere corretti, una DP è una proprietà supportata da un sistema di proprietà esterno, in particolare uno che consente di entrare in gioco fattori diversi da "l'ultimo valore impostato" quando si ottiene il valore della proprietà.)
La migliore informazione di supplemento qui alla risposta di accettazione. – KMC
Una proprietà di dipendenza è una struttura in cui il valore corrente dipende (da qui il nome) su altri aspetti quali valori di default, la convalida, la coercizione valore successione o animazioni.
Anche una proprietà di depedency ha un supporto integrato per notifiche di modifiche, associazione dati e stile.
Cosa sono?
Un mucchio di classi e modi definiti di utilizzarli che forniscono la funzionalità sopra descritta per essere utilizzati su classi che ereditano da DependencyObject.
Non sono una lingua. Sono una funzionalità di .NET Framework.
grazie. Ben fatto. – Freelancer
Una proprietà di dipendenza dipende da più provider per determinarne il valore in qualsiasi momento. Questi provider potrebbero essere un'animazione che cambia continuamente il suo valore, un elemento padre il cui valore di proprietà si propaga ai suoi figli e così via.
Probabilmente la più grande caratteristica di una proprietà di dipendenza è la sua capacità integrata di fornire notifiche di modifica.
Ogni volta che il valore di una proprietà di dipendenza cambia, WPF può attivare automaticamente un numero di azioni, in base ai metadati della proprietà. Queste azioni possono essere ri-renderizzate- gli elementi appropriati, aggiornando il layout corrente, aggiornando i binding di dati e molto di più. Una delle funzionalità più interessanti abilitate da questa notifica di modifica incorporata - zione è trigger di proprietà, che consente di eseguire le proprie azioni personalizzate quando un valore di proprietà cambia, senza scrivere alcun codice procedurale
Con riferimento al primo punto, in che modo il problema dello spazio di byte non si è verificato in Winforms che ha molte proprietà nei suoi controlli. – thewpfguy
thewpfguy: i controlli Winforms sono supportati da hWnds che hanno un sovraccarico tale che il numero di byte occupati da eventi e proprietà varie è irrilevante. – Gabe
Questo è esattamente il punto. In Winforms, anche con un sacco di overhead - hwnd, event, proprietà (alcune mai assegnate) - l'utilizzo della memoria non è mai stato un problema. Se fosse davvero un problema, allora questo disegno a sostegno del dep. puntello. potrebbe essere stato implementato anche lì. Vedo che questo efficace vantaggio dello spazio di memoria è citato in molti libri, ma sta risolvendo un problema che in realtà non esisteva o non importava. Credo anche se questo è uno dei vantaggi del dep. proprietà dovrebbe essere il meno importante. – thewpfguy