Je vois cela souvent dans la documentation C#. Mais qu'est-ce que ça fait?Qu'est-ce que cela signifie? Nom public {get; set;}
public class Car
{
public Name { get; set; }
}
Je vois cela souvent dans la documentation C#. Mais qu'est-ce que ça fait?Qu'est-ce que cela signifie? Nom public {get; set;}
public class Car
{
public Name { get; set; }
}
Il est un raccourci pour:
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
Le compilateur génère la variable membre. C'est ce qu'on appelle un automatic property.
... bien que le nom du champ soit en fait un nom "indicible" (par exemple '<> __ name') qui n'est pas valide en tant qu'identificateur C#. Cela vous empêche d'accéder directement au champ depuis votre code. Le terme de spécification est "propriété implémentée automatiquement" mais la plupart des gens l'appellent en effet une propriété automatique :) –
@phoog: Vous vouliez sûrement dire 'pédantisme' (ou comme Mark l'a souligné - 'pedantry')? : D – stuxnetting
@stuxnetting "pedantryism" était une blague. Dites juste. Pour l'enregistrement et tout. – phoog
C'est une propriété automatique de lecture-écriture. C'est un ajout C# 3.0. Quelque chose comme:
public class Car {
private string name;
public string Name { get { return name; } set { name = value; } }
}
sauf que vous ne pouvez pas accéder directement au champ de support.
Il est le equivilent de faire:
private string _Text;
public string Text
{
get { return _Text; }
set { _Text = value; }
}
Sauf que vous n'ont pas accès à la variable privée tandis qu'à l'intérieur de la classe.
Donc, si vous voulez garder la variable privée, vous devez utiliser le "vieux" format (comme dans votre exemple)? – Rado
Cela s'appelle une propriété implémentée automatiquement et est new to C# 3.0. C'est une syntaxe plus propre lorsque votre accès à la propriété n'a pas besoin de comportement particulier ou de validation. Il est similaire en fonction:
public class Car
{
private string _name;
public string Name
{
get { return _name; }
set {_name = value; }
}
}
Il permet d'économiser une bonne quantité de code, mais vous laisse plus tard la possibilité de modifier la logique accesseur si le comportement ou les règles doivent changer.
RÉSUMÉ: Dans C# 3.0 et versions ultérieures, les propriétés implémentées automatiquement faire propriété déclaration plus concise lorsque aucune logique supplémentaire est nécessaire dans les accesseurs de propriété.
En termes simples, ils sont appelés accesseurs de propriété. Leur mise en œuvre peut être expliquée comme ci-dessous
1.get {nom de retour} Le bloc de code dans l'accesseur get est exécutée lorsque la propriété est Lire.
2.set {nom = valeur} Le bloc de code dans l'accesseur set est exécuté lorsque la propriété est Affecté une nouvelle valeur.
Par exemple.(En supposant que vous utilisez C#)
class Person
{
private string name; // the name field
public string Name // the Name property
{
get
{
return name;
}
set
{
name = value;
}
}
}
Maintenant, quand vous faites référence à cette propriété comme ci-dessous
Personne p = new Person(); // instanciation la classe ou la création d'objet ' p » de la classe 'personne'
System.Console.Write(p.Name); //The get accessor is invoked here
L'accesseur get est appelé Read la valeur de la propriété, c'est-à-dire que le compilateur essaie de lire la valeur de la chaîne 'name'.
2.Lorsque vous Affecter une valeur (en utilisant un argument) à la propriété « Nom » comme ci-dessous
Person p = new Person();
p.Name = "Stack" // the set accessor is invoked here
Console.Writeline(p.Name) //invokes the get accessor
Console.ReadKey(); //Holds the output until a key is pressed
L'ensemble accesseur Affecte la valeur « Stack » à la « c.-à-propriété Name 'Stack' est stocké dans la chaîne 'name'
Ouput.
Stack
Quelle est la raison d'avoir un get et un set en premier lieu, pourquoi ne pas simplement utiliser un accesseur à la fois pour définir et obtenir, c'est la question que personne ne semble capable de répondre en termes simples. – JsonStatham
Puis-je demander pourquoi cela a été marqué comme un doublon? Cela a été demandé en 2009 et le "original" a été demandé en 2011! – Nathangrad