Bonjour, quelle est la différence entre :
etCode:
1
2
3
4
5 public class tag { public int IdNiveau; public string NomNiveau; }
par avance merciCode:
1
2
3
4
5 public class tag { public int IdNiveau {get; set;} public string NomNiveau {get; set;} }
Version imprimable
Bonjour, quelle est la différence entre :
etCode:
1
2
3
4
5 public class tag { public int IdNiveau; public string NomNiveau; }
par avance merciCode:
1
2
3
4
5 public class tag { public int IdNiveau {get; set;} public string NomNiveau {get; set;} }
D'un côté tu as une variable et de l'autre une propriété
Pour être exact, ça s'appelle un champ et non une variable ;)
Dans le 2e exemple de code, tu as des propriétés auto-implémentées. C'est comme si tu avais écris ceci :
Une propriété est en fait une paire de méthodes (appellées "accesseurs") get et set, qui servent respectivement à obtenir ou modifier la valeur de la propriété. L'intérêt d'une propriété par rapport à un champ est que tu encapsules la valeur : aucun code extérieur à la classe ne peut modifier tes champs privés sans passer par du code que tu contrôles, ce qui permet d'ajouter si besoin du code de validation, de déclencher des notifications, etc...Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 public class tag { private int _idNiveau; private string _nomNiveau; public int IdNiveau { get { return _idNiveau; } set { _idNiveau = value; } } public string NomNiveau { get { return _nomNiveau; } set { _nomNiveau = value; } } }
Il est d'ailleurs fortement déconseillé de déclarer des champs publics (sauf éventuellement en static readonly), car celà permet à du code externe de modifier l'état interne de ta classe sans que tu puisses le contrôler. Utilise plutôt des propriétés pour mieux respecter l'encapsulation
EDIT: c'est dans la FAQ, j'aurais dû m'en douter...
tomlev, pas grave on est tous passé par là...
en même temps si tout le monde lisait les docs, les FAQs, les howto, les tuto... ca se saurait... il n'y aurait pratiquement plus aucune question sur le forum :)
Sinon pour compléter la réponse déjà bien complète de tomlev, on peut ajouter:
- on peut rendre une propriété virtual
- on peut déclarer le setter private et garder le getter public