Pourquoi les propriétés implémentées automatiquement doivent définir les accesseurs get et set

Quand on définit une propriété comme

public ssortingng Name {get; set;} 

dot net peut rendre nos propriétés code. mais quand on utilise

  public ssortingng Name {get;} public ssortingng Name {set;} 

nous faisons face à

 'Hajloo.SomeThing.PropertyName.set' must declare a body because it is not marked abstract or extern. Automatically implemented properties must define both get and set accessors. 

Pourquoi le compilateur ne peut pas déterminer la propriété et créer du code automatiquement? Quel est le problème?

    Parce que les propriétés implémentées automatiquement génèrent leur propre magasin de sauvegarde pour les valeurs de propriété. Vous n’avez pas access au magasin interne.

    Mise en œuvre d’une propriété avec

    • simplement obtenir: signifie que vous ne pouvez récupérer que les valeurs. Vous ne pouvez jamais définir la valeur de la propriété (même dans la classe qui le contient)
    • Il suffit de définir: signifie que vous ne pouvez définir que les valeurs. Vous ne pouvez pas récupérer la valeur de la propriété.

    pour une propriété normale

     private int _data; public int Data{ get { return _data } }; 

    Ici, la classe parente peut effectuer les opérations suivantes ailleurs dans la classe (ce qu’elle ne peut pas faire avec des accessoires automatiques)

    _data = 100;

    Remarque: Vous pouvez définir un auto-prop comme celui-ci (c’est ainsi que je l’utilise le plus souvent).

     public int Data { get; private set;} 

    Cela signifie que la propriété ne peut pas être définie par des clients externes de la classe. Cependant, la classe contenante elle-même peut définir la propriété plusieurs fois via this.Data = x; dans la définition de classe.

    S’il n’y a pas de sélecteur, la propriété ne peut jamais avoir autre chose que la valeur par défaut, elle ne sert donc à rien.

    Un scénario plus moderne pour recevoir cette erreur est un code de construction qui utilise la syntaxe C # 6 en utilisant une version de VisualStudio inférieure à VS 2015 (ou en utilisant MsBuild inférieure à 14).

    En C # 6.0, il est permis d’avoir des autoProperties qui n’ont pas de paramètre de définition (elles sont supposées être un ensemble privé).

    Essayez de comstackr avec VS2015 + ou msbuild 14+ .. ou modifiez le code de manière à ce que toutes les autoProperties aient un sélecteur.