Default Value di una proprietà di un controllo

Una cosa che può trarre in inganno quando si creano controlli personalizzati in C#, siano essi di tipo Web o di tipo Form (passatemi la definizione), è l’attributo DefaultValue.

Ci si potrebbe aspettare che quell’attributo imposti il valore di Default. Non è così.

Spetta sempre al programmatore impostare il valore del controllo sia in fase di inizializzazione che in fase di rendering / esecuzione.La domanda allora sorge spontanea: a cosa serve l’attributo se non viene utilizzato?In realtà l’attributo viene utilizzato, ma solo nell’IDE, nella modalità Design.

Cambiando un valore di una proprietà all’interno dell’IDE si potrà infatti notare che la proprietà diventa grassetto quando assume un valore diverso dall’attributo DefaultValue.

Fantastico, ma se io volessi usare quel valore, e ad esempio evitare di doverlo confrontare con quello di una variabile o di una costante privata (magari dal medesimo valore) usata per la sola inizializzazione?

Nulla di più semplice se si utilizza del codice come quello qui sotto riportato:

private T GetDefaultValue(string PropertyName){
	// Gets the attributes for the property.
	System.ComponentModel.AttributeCollection attributes = TypeDescriptor.GetProperties(this)

	[PropertyName].Attributes;
	return (T)((DefaultValueAttribute)attributes[typeof(DefaultValueAttribute)]).Value;
}