Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

CoqBlog

.NET is good :-)
{ Blog de coq }

Actualités

.NET : S'il fallait une raison de plus d'éviter de définir des propriétés en écriture seule (write-only)...

... j'en ai découverte une en lisant une entrée sur Connect : la méthode TypeDescriptor.GetProperties ne retourne pas les propriétés pour lesquelles l'accesseur get n'est pas défini.

L'entrée a été close avec un statut "By Design", accompagné d'un commentaire assez explicite :

Posted by Microsoft on 7/5/2010 at 8:29 PM
This is by design. We don't consider write-only properties. In our implementation, we check if the get method is null. I'll contact our people to update msdn.

Source : TypeDescriptor.GetProperties returns null for properties that only have a setter | Microsoft Connect

Je déteste les propriétés en écriture seule.
Je trouve celà contre-nature, et déstabilisant à l'usage : qui s'attend à ce qu'une propriété ne retourne pas de valeur ? (haaa, la bonne vieille erreur de compilation "The property or indexer 'MyClass.MyProperty' cannot be used in this context because it lacks the get accessor"...).
Personnellement, je leur préfère toujours une méthode.

Dans le cas de l'impact sur TypeDescriptor.GetProperties voici un petit exemple.
Ce code* :

class Program
{
static void Main(string[] args)
{
Console.WriteLine("Type.GetProperties : ");
Type weirdClassType = typeof(WeirdClass);
PropertyInfo[] propInformations =
weirdClassType.GetProperties();
Console.WriteLine(" Count : {0}",
propInformations.Length);
foreach (PropertyInfo propInfo in propInformations)
{
Console.WriteLine(" {0}", propInfo.Name);
}

Console.WriteLine();
Console.WriteLine("TypeDescriptor.GetProperties : ");
WeirdClass instance = new WeirdClass();
PropertyDescriptorCollection propDescriptors =
TypeDescriptor.GetProperties(instance);
Console.WriteLine(" Count : {0}",
propDescriptors.Count);
foreach (PropertyDescriptor propDes in propDescriptors)
{
Console.WriteLine(" {0}", propDes.Name);
}
}

class WeirdClass
{
private String _name;

public String GetName
{
get { return this._name; }
}

public String SetName
{
set { this._name = value; }
}
}
}

donnera l'affichage suivant :

Capture d'écran de la Console montrant le résultat d'exécution du code d'exemple

On voit bien le manque de la propriété SetName sur le retour de TypeDescriptor.GetProperties, alors que Type.GetProperties la découvre bien.

* : pardonnez le manque d'espacements, l'addin de formatage de code ne semble plus les apprécier.

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Posted: mardi 6 juillet 2010 23:58 par coq
Classé sous : ,

Commentaires

Pas de commentaires

Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Merci par Blog de Jérémy Jeanson le 10-01-2019, 20:47

- Office 365: Script PowerShell pour auditer l’usage des Office Groups de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 11:02

- Office 365: Script PowerShell pour auditer l’usage de Microsoft Teams de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 10:39

- Office 365: Script PowerShell pour auditer l’usage de OneDrive for Business de votre tenant par Blog Technique de Romelard Fabrice le 04-25-2019, 15:13

- Office 365: Script PowerShell pour auditer l’usage de SharePoint Online de votre tenant par Blog Technique de Romelard Fabrice le 02-27-2019, 13:39

- Office 365: Script PowerShell pour auditer l’usage d’Exchange Online de votre tenant par Blog Technique de Romelard Fabrice le 02-25-2019, 15:07

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Stream Portal par Blog Technique de Romelard Fabrice le 02-21-2019, 17:56

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Video Portal par Blog Technique de Romelard Fabrice le 02-18-2019, 18:56

- Office 365: Script PowerShell pour extraire les Audit Log basés sur des filtres fournis par Blog Technique de Romelard Fabrice le 01-28-2019, 16:13

- SharePoint Online: Script PowerShell pour désactiver l’Option IRM des sites SPO non autorisés par Blog Technique de Romelard Fabrice le 12-14-2018, 13:01