Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [c#] Property get di array, list, etc

    Salve,
    mi sto ponendo in questi giorni un problema. Se io scrivo una property get che ritorna un array, una list, o anche un oggetto di qualsiasi tipo, quello che viene ritornato è in effetti un indirizzo, una reference al primo indirizzo di memoria dell'array, la list o l'oggetto. In questo modo quindi se chi usa la get esegue operazioni sull'oggetto ritornato (per esempio una Clear(), una Add(), una remove(), etc su un oggetto List<>), in effetti modifica anche il valore di quell'oggetto. Quindi la prerogativa della property di poter essere di sola lettura se ne va a farsi benedire.

    Volevo sapere da voi se il mio ragionamento è giusto o no, e nel caso in cui sia giusto se sapete consigliarmi come sistemare la cosa.

    Grazie, ciao

  2. #2
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    se la get la vuoi in sola lettura devi ritornare una copia dell'array.. cmq ciò vale per tutti gli oggetti del nel che siano riferimenti..

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463
    Il comportamento descritto è normale dal punto di vista logico: seguendo il principio della "composizione", mi capita spesso di realizzare oggetti che, al loro interno, espongono altri oggetti che sono delle liste e vengono create assieme all'oggetto principale che le contiene; questi campi li espongo tramite una proprietà di sola lettura proprio perché desidero che la lista possa essere modificata, dal punto di vista degli elementi che contiene, ma che non sia possibile ovviamente sostituire il riferimento alla lista creata e gestita dall'oggetto con un'altra lista.

    Per impedire queste operazioni, si potrebbe restituire una copia della lista in formato array, come è già stato suggerito (ma userei un metodo, non una proprietà, poiché potrebbe essere un'operazione più dispendiosa in termini di CPU rispetto alle lettura/scrittura di un valore), oppure estendere la classe della lista aggiungendo dei metodi "di contorno" che impediscano le operazioni in questione, o ridefinire i metodi esistenti per bloccare la modifica in determinati contesti.

    Credo comunque che la soluzione dell'array sia quella più efficace.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  4. #4
    Bene, allora non mi sbagliavo .

    Grazie a tutti.

    Ciao

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.