C # Propriétés automatiques

Je suis un peu confus sur le sharepoints propriétés automatiques dans C # par exemple

public ssortingng Forename{ get; set; } 

Je comprends que vous sauvegardez du code sans avoir à déclarer une variable privée, mais quel est le but d’une propriété lorsque vous n’utilisez pas de logique get ou set? Pourquoi ne pas simplement utiliser

 public ssortingng Forename; 

Je ne suis pas sûr de la différence entre ces 2 déclarations, j’ai toujours pensé que vous utilisiez des propriétés si vous vouliez une logique de get / set supplémentaire?

    Le code peut être placé dans les propriétés sans casser le contrat, les champs ne peuvent pas contenir de code sans les modifier en propriétés (et briser l’interface). Les propriétés peuvent être en lecture seule ou en écriture seulement, les champs ne peuvent pas. Les propriétés peuvent être des données liées, les champs ne peuvent pas.

    Tu peux écrire

     public ssortingng Forename{ get; private set; } 

    pour obtenir des propriétés en lecture seule … Toujours pas aussi polyvalent que les propriétés réelles, mais c’est un compromis que pour certaines œuvres.

    Je ne suis pas sûr de la différence entre ces 2 déclarations, j’ai toujours pensé que vous utilisiez des propriétés si vous vouliez une logique de get / set supplémentaire?

    Dans le premier cas, le compilateur appenda automatiquement un champ pour vous et encapsulera la propriété. C’est fondamentalement l’équivalent de faire:

     private ssortingng forename; public ssortingng Forename { get { return this.forename; } set { this.forename = value; } } 

    L’utilisation des propriétés sur les champs présente de nombreux avantages. Même si vous n’avez pas besoin de certaines raisons spécifiques, telles que la liaison de données, cela consortingbue à la pérennité de votre API.

    Le problème principal est que, si vous créez un champ, mais dans la v2 de votre application, vous avez besoin d’une propriété, vous allez casser l’API. En utilisant une propriété automatique dès le départ, vous avez la possibilité de modifier votre API à tout moment, sans vous soucier des problèmes de compatibilité des sources ou des binarys.

    Cela signifie que vous vous attendez à append la logique plus tard.

    Si vous le faites et que vous l’avez depuis le début, vous n’aurez pas à reconstruire le code dépendant. Si vous le changez d’une variable en propriété, vous devrez le faire.

    Envisagez de consulter certains threads relatifs à la différence entre les propriétés automatiques et les champs publics , les champs et les propriétés , les propriétés automatiques – utiles ou non? Pourquoi ne pas utiliser les champs publics .

    Les membres de données publiques sont mauvais (en ce sens que l’object ne contrôle pas la modification de son propre état – il devient une variable globale). Brise l’encapsulation – un principe de la POO.

    Les propriétés automatiques sont là pour fournir une encapsulation et éviter les corvées pénibles liées à l’écriture de code de plaque de chaudière pour des propriétés simples.

     public ssortingng ID { get; set;} 

    Vous pouvez changer les propriétés automatiques en propriétés non automatiques dans le futur (par exemple, vous avez une validation dans un setter par exemple) … et ne pas casser les clients existants.

     ssortingng m_ID; public ssortingng ID { get { return m_ID; } set { //validate value conforms to a certain pattern via a regex match m_ID = value; } } 

    Vous ne pouvez pas faire la même chose avec les atsortingbuts de données publiques. La modification d’un atsortingbut de données en une propriété force les clients existants à recomstackr avant de pouvoir interagir à nouveau.

    D’une part, vous pouvez définir la propriété virtuelle et implémenter la logique dans une classe héritée. Vous pouvez également implémenter la logique dans la même classe par la suite et aucun code ne dépendra de la classe.

    Lorsque vous ajoutez des propriétés automatiques, le compilateur appenda la logique get set dans l’application, ce qui signifie que si vous ajoutez plus tard à cette logique, les références à votre propriété provenant de bibliothèques externes continueront de fonctionner.

    Si vous avez migré d’une variable publique vers une propriété, cela constituerait un changement radical pour les autres bibliothèques faisant référence au vôtre. Par conséquent, pourquoi ne pas commencer par une propriété auto? 🙂

    Toutes les propriétés n’ont pas besoin de logique get / set. Si c’est le cas, vous utilisez une variable privée. Par exemple, dans un modèle de type MV, votre modèle n’aurait pas beaucoup de logique. Mais vous pouvez mélanger et assortir au besoin.

    Si vous deviez utiliser un champ comme vous l’avez suggéré à la place d’une propriété, vous ne pouvez pas par exemple définir une interface pour décrire votre classe correctement, car les interfaces ne peuvent pas contenir de champs de données.

    Une propriété est comme un contrat et vous pouvez modifier la mise en œuvre d’une propriété sans affecter les clients utilisant vos classes et propriétés. Vous n’avez peut-être aucune logique aujourd’hui, mais à mesure que les exigences de votre entreprise évoluent et si vous souhaitez introduire du code, les propriétés sont votre pari le plus sûr. Les 2 liens suivants sont d’excellents tutoriels vidéo. La première explique le besoin de propriétés par rapport à la simple utilisation des champs et la deuxième vidéo explique différents types de propriétés. Je les ai trouvés très utiles.

    Besoin des propriétés en C #

    Poperties en C #, lecture seule, écriture seule, lecture / écriture, mise en œuvre automatique

    Jetez un coup d’oeil au code et à l’explication suivants.
    The most common implementation for a property is getter or a setter that simply reads and writes to a private field of the same type as a property. An automatic property declaration instructs the comstackr to provide this implementation. The comstackr automatically generates a private backing field.
    Regardez dans le code suivant: –

      public class Stock { decimal currentPrice ; // private backing field. public decimal CurrentPrice { get { return currentPrice ; } set { currentPrice = value ; } } } 

    Le même code peut être réécrit comme suit: –

      public class Stock { public decimal CurrentPrice { get ; set ; } // The comstackr will auto generate a backing field. } 

    SOURCE: – C # en bref