C# - Vantaggi uso proprietà

di il
3 risposte

C# - Vantaggi uso proprietà

Mi sto approcciando a C# partendo dalle basi OOP.
Nel mio immaginario ho i campi (privati) e, per ogni campo una coppia di metodi getCampoX() e setCampoX() per leggere/scrivere il CampoX. I metodi sono pubblici.
Questa cosa è replicabile in C#.
Tuttavia, C# introduce le proprietà che NON sono delle variabili ma ... che consentono tramite i metodi get e set di leggere/scrivere una variabile, insomma un getCampoX() e setCampoX().
Non capisco però quale sia, se esiste, la reale differenza tra le proprietà con i suoi get e set, e l'approccio stile OOP classico che usa i getCampoX() e setCampoX().

3 Risposte

  • Re: C# - Vantaggi uso proprietà

    zoro82 ha scritto:


    Tuttavia, C# introduce le proprietà che NON sono delle variabili ma ... che consentono tramite i metodi get e set di leggere/scrivere una variabile, insomma un getCampoX() e setCampoX().
    Non capisco però quale sia, se esiste, la reale differenza tra le proprietà con i suoi get e set, e l'approccio stile OOP classico che usa i getCampoX() e setCampoX().
    Direi che il vantaggio è esattamente quello che hai descritto, tant'è vero che non in tutti i linguaggi OOP esiste il concetto di "proprietà" (che io sappia, in Java ad esempio).

    L'uso di proprietà ti permette di scrivere codice come se tu accedessi a un campo dell'oggetto, quindi ti offre leggibilità, passando tuttavia da metodi che possono alterare il valore in uscita e/o il valore in ingresso, magari controllandolo, e quindi conservare i vantaggi dell'incapsulazione, che è uno dei principi della OOP.

    Il vantaggio in breve è prettamente commerciale. C'è anche un discorso più pratico legato al fatto che usare le proprietà rende più facile identificare campi (virtuali) che possono essere letti e scritti tramite la finestra delle "Properties" in Visual Studio, quindi offrono un servizio a favore della progettazione rapida nell'IDE, anche se questo si potrebbe ottenere comunque dai metodi get/set se presenti, però le proprietà lo rendono senz'altro più intuitivo.

    Ciao!
  • Re: C# - Vantaggi uso proprietà

    Nessuno, zero spaccato.

    Scrivere
    
    object.property = 10;
    print(object.property)
    
    dove "property' e' una property alla C# (NON un membro di instanza) e' ESATTAMENTE come scrivere
    
    object.setProperty(10);
    print(object.getProperty())
    
    MA ATTENTO, c'e' anche questo:
    
    object.property(10);
    print(object.property())
    

    Cosa cambia?
    Ancora ASSOLUTAMENTE NIENTE

    E' solo una questione di ""style"".
    In Java ci sono diverse librerie che usano la ""reflection"" per fare le loro cose ed sfruttano questo "stile" di programmazione per decidere se un metodo e' o meno una ""proprieta"".
    MA e' solo questione di ""stile"".
    Ci sono librerie che permettono di ""decidere"" quale ""stile"" deve essere usato.

    Poi, se vogliamo andare piu' ne' dettaglio, l'uso della ""proprieta"" (alla C#) ti permette di cambiare l'accesso DIRETTO ad membro di un oggetto in un accesso ""controllato"" SENZA cambiare il resto del codice.
    Ma che comunque va ricompilato perche' anche se la sintassi SEMBRA la stessa, la semantica sottostante non lo e' piu':
    prima accedevi alla struttura dati, ora devi chiamare un metodo, ma e' il compilatore che si occupa di farlo.

    @Alka, non e' detto che con qualche rimaneggio/librarie di annotazioni, in qualche futuro non troppo lontano, non si possa ottenere lo stesso effetto di C#.
    Gia' ora, con Lombok puoi gererare getter/setter al volo senza scrivere il codice, e lo puoi fare usando entrambi gli stili.

    Inoltre, non confondere il ""concetto"" con la ""sintassi"" usata per esprimerlo.
    E' un ""concetto"" che in Java e' solo ""concettuale"" (MA usato abbondantemente da librerie di terze parti cone Spring, Jersey, ed n-mila altre) ed in C# ci hanno realizzato anche una sintassi ""dedicata"".
    Ma non cambia nulla.
  • Re: C# - Vantaggi uso proprietà

    OK. Siete stati chiarissmi, grazie.
Devi accedere o registrarti per scrivere nel forum
3 risposte