Je n'ai jamais trouvé de valable de cas d'utilisation pour une propriété en écriture seule. Honnêtement, s'il y a un cas d'utilisation pour une propriété en écriture seule, je pense qu'il est sûr de dire que la solution est mal conçu.
Si vous avez besoin d' "écriture seule" sémantique que vous devez utiliser une méthode. Par exemple, un autre utilisateur a trouvé un exemple d'un objet utilisateur qui utilise une propriété en écriture seule pour définir un mot de passe. C'est une mauvaise conception:
class User
{
public string Password
{
set { /* password encryption here */ }
}
}
Ugh. C'est beaucoup mieux:
class User
{
public void SetPassword(string password)
{
/* password encryption here */
}
}
Voir, une propriété de lecture/écriture est un ensemble de méthodes qui sont conçus pour se faire passer pour un champ. Ils regardent et se sentent comme un champ. C'est pour cette raison qu'une propriété en lecture seule a un sens, car nous sommes habitués à avoir des champs et des variables que l'on peut lire mais pas les modifier. Cependant il n'y a pas de champ correspondant à la variable ou de construire qui est accessible en écriture mais pas lisible.
C'est pourquoi je crois que la création d'une API qui emploie des propriétés en écriture seule est une mauvaise pratique. Il s'exécute à contre-intuitif à ce que je crois est l'objectif principal de la propriété de syntaxe en C#.
Edit: Plus de la philosophie... je crois que les classes ont un objectif fonctionnel: ils fournissent un conteneur pour les données relatives à la tenue et de manipulation. Prendre notre User
classe par exemple - que cette classe va contenir tous les éléments d'information qui se rapportent à un utilisateur dans le système. Nous recueillons tous ces éléments de données et de leur donner un seul nom d'utilisateur. De cette façon nous utilisons les classes pour créer des abstractions. User
est une abstraction qui nous permet de raisonner sur tous les éléments de données qui composent un utilisateur (mot de passe, nom, prénom, date de naissance, etc.).
Il y a maintenant bien des abstractions et il y a de mauvaises abstractions. Je crois que l'écriture seule propriétés sont mauvais abstractions que vous laissez quelqu'un pour les données d'entrée et de ne pas le lire. Pourquoi voulez-vous interdire cela? Probablement parce que l'information qui a été adoptée en a été transformé d'une manière qui le rend illisible pour le passant.
Cela signifie donc qu'une propriété en écriture seule , par définition, doit créer les effets secondaires que l'appelant ne peut pas voir (parce que si ils pouvaient les voir, alors il n'y aurait aucune raison de faire de la propriété en écriture seule). Le meilleur de construire dans le langage C# pour la définition de la valeur avec des effets secondaires est la méthode.
Je vous recommande fortement de ne pas utiliser de propriétés en écriture seule, parce que les consommateurs de votre API trouverez déroutant et frustrant. Même si vous trouvez un valide de cas d'utilisation de cette syntaxe, il n'a pas à justifier de son utilisation.
Edit: Voici des recommandations officielles à partir .Net Cadre des lignes Directrices de Conception pour le Développement de Bibliothèques de Classe ->
Membre Des Lignes Directrices De Conception->
Propriété De Conception
Ne fournissent pas de set-seules les propriétés.
Si la propriété de lecture ne peut pas être fourni, l'utilisation d'une méthode à mettre en œuvre
la fonctionnalité de la place. Le nom de la méthode doit commencer par Définir
suivie par ce qui aurait été le nom de la propriété...