public String text {get; set{
// here comes some setter checking/setter logic
// finally assign the value to the var without using the setter
<is_there_a_"without_setter"_keyword?> text = value;
}
}
Répondre
Non il n'y a pas moyen de le faire
Non La propriété est l'interface exposée (pas C# interface
) pour contrôler l'accès au champ de support privé. La syntaxe spéciale introduite en C# 3 est ce qu'on appelle le "sucre syntaxique" - le compilateur le transforme en un champ privé que vous ne voyez jamais avec une propriété get/set pour y accéder.
Éditer: Les propriétés elles-mêmes ne stockent pas de données. Ils contrôlent simplement l'accès aux données stockées ailleurs, où un cas courant est dans un champ privé.
Une autre Edit: Voici la syntaxe de sucre, je fais référence à:
// When this is compiled, it actually creates a private
// field for you, which the property accesses.
public int MyProperty
{
get;
set;
}
Si vous définissez un code personnalisé pour votre setter, si simple, vous devez également définir la méthode get si vous le voulez
plus vous pouvez aller sans écrire le code personnalisé est
public String text {get; protected set}
qui permet un accès en lecture publique et modifiction que dans vos classes et son descendant
Il n'y a aucun moyen de le faire lorsque vous avez une logique personnalisée à appliquer. Si vous avez une propriété simple, vous pouvez faire:
public int Foo { get; set; }
Vous pouvez également définir les visibilités de chaque:
public int Foo { get; private set; }
Vous ne pouvez pas le faire pour une propriété où vous ne définissez pas le champ de support. Lorsque vous définissez une telle propriété, le compilateur C# génère un champ private
avec le nom <PropertyName>k_BackingField
dans le fichier MSIL. Comme d'autres affiches l'ont fait remarquer, vous pouvez tout au plus ajuster les modificateurs d'accès sur la propriété.
Il y a quelques règles concernant cela aussi, qui sont pour la plupart bon sens:
- Contrôle d'accès sur
get
etset
ne peut être plus restrictive que sur la propriété. C'est-à-dire que vous ne pouvez pas avoir un PropertyName privé et lui donner unpublic
get
ouset
. - Vous ne pouvez pas définir à la fois
get
etset
comme étantprivate
lorsque la propriété estpublic
. Au plus un attribut peut êtreprivate
.
Cependant, ceci est tout le sucre syntatique fourni par le compilateur C#. Vous pouvez fournir vous-même le champ de sauvegarde et fournir vos implémentations get et set pour la propriété. Vous pouvez choisir de créer le champ de sauvegarde public
.
Il n'y a qu'une différence mineure dans le code MSIL généré pour les deux cas (Le champ de sauvegarde généré comprend un attribut System.Runtime.CompilerServices.CompilerGeneratedAttribute
.Il en est de même pour les méthodes get
et set
)
- 1. C++ - surcharge Constructor - privés et publics
- 2. Comment trouver tous les champs publics d'un objet en C#?
- 3. C# - Comment parcourir les classes champs et définir les propriétés
- 4. Vb.Net question de portée - champs privés
- 5. Est-il possible de définir dynamiquement les noms des champs du modèle?
- 6. C# - Obtenir les types de champs
- 7. « pour » boucle à travers les champs de formulaire et à l'exclusion d'un des champs avec « si »
- 8. champs XmlSerializer et XmlElement
- 9. Énumération des champs de certificat en C#
- 10. SQL/C# MVC: Commande sur plusieurs champs
- 11. Est-il possible de "autopopuler" des champs dans IE?
- 12. Comment obtenir des instances dans tous les champs privés d'un objet?
- 13. Afficher les champs obligatoires
- 14. Méthodes statiques fonctionnant sur des champs d'instance
- 15. SPSiteDataQuery avec l'équation sur les champs Numéro
- 16. Membres privés et protégés: C++
- 17. sérialisation tous les champs
- 18. C# DataContractJsonSerializer à l'exclusion des champs au moment de l'exécution
- 19. LINQ to Entities et Xml Les champs
- 20. Problème de polymorphisme - champs virtuels? (C#)
- 21. Combiner les champs des tables jointes
- 22. Retourne tous les champs et les lignes distinctes
- 23. Comment implémenter des champs de texte avec saisie semi-automatique pour les champs habtm?
- 24. JavaScript: Dynamic Noms des champs
- 25. Effacer les champs sur CreateUserWizard, contrôle de connexion
- 26. Copier des champs dans Oracle
- 27. Plage sur les champs entiers dans Axapta/Dynamics Ax
- 28. Champs publics/propriétés d'une classe dérivée de BindingList <T> coutume sérialisent
- 29. Question sur la sécurité des champs d'instance et des origines de thread
- 30. MS Word Office Automation - Remplissage des champs de formulaire texte et des champs de formulaire de case à cocher et de fusion et publipostage