readonly no garanteix la immutabilitat en C#

Explora readonly en C#: diferències entre tipus per valor i per referència, com aconseguir immutabilitat real i bones pràctiques de seguretat i qualitat de programari a Q2BSTUDIO.

domingo, 17 de agosto de 2025 • 3 min de lectura • Equip Q2BSTUDIO

Intel·ligència-Artificial-

Quan et trobes per primera vegada amb la paraula clau readonly en C# sembla senzilla: evitar que un camp sigui reassignat fora del constructor. No obstant, en aplicar-la a tipus per referència sorgeixen matisos importants que tot desenvolupador ha de conèixer per escriure codi més segur i net. A Q2BSTUDIO, empresa de desenvolupament de programari i aplicacions a mida especialitzada en intel·ligència artificial, ciberseguretat i serveis cloud AWS i Azure, treballem amb aquestes bones pràctiques per lliurar programari a mida robust i escalable.

Què fa realment readonly en C#? En C#, readonly s'aplica a camps i garanteix que el camp només pugui assignar-se en la declaració o dins del constructor de la classe o struct. Un cop assignat, el camp no pot apuntar a un objecte diferent. Això protegeix la referència però no impedeix que l'objecte referenciat canviï el seu estat intern.

Exemple conceptual span public class User { public string Name { get; set; } } public class Account { private readonly User _user = new User(); public void ChangeUser() { // És possible modificar l'estat intern _user.Name = NewName; // Però això produeix error en temps de compilació _user = new User(); } }

Malentès freqüent Un camp readonly d'un tipus per referència no fa l'objecte immutable, només bloqueja la reassignació de la referència. L'objecte mateix pot mutar si els seus membres permeten mutació.

Tipus per valor davant de tipus per referència amb readonly Amb tipus per valor com int, bool o struct, readonly impedeix canviar el valor després de l'assignació. Amb tipus per referència, readonly impedeix reassignar la variable a un altre objecte però permet modificar el contingut de l'objecte. Exemple conceptual span readonly int numero = 5; numero = 10; // error de compilació span readonly List<string> items = new List<string>(); items.Add(Test); // possible items = new List<string>(); // error de compilació

Com aconseguir que un tipus per referència sigui veritablement immutable Perquè l'estat d'un objecte sigui immutable cal dissenyar-lo així intencionadament: evitar setters a les propietats; declarar camps com a readonly; usar init per a inicialització només; no exposar col·leccions internes directament; utilitzar col·leccions immutables de System.Collections.Immutable o exposar interfícies de només lectura com IReadOnlyList<T> i retornar còpies defensives quan sigui necessari. A més, considerar l'ús de record types i propietats init introduïdes en C# 9 per facilitar objectes immutables.

Exemple d'enfocament immutable conceptual public class User { public string Name { get; init; } } Una altra opció són els record record UserRecord(string Name); ambdós enfocaments impedeixen modificacions després de la inicialització.

Readonly i propietats Tot i que readonly s'aplica a camps, en propietats es pot emular un comportament similar usant init perquè la propietat sigui immutable després de la inicialització. A més, és bona pràctica no exposar col·leccions mutables; en lloc d'això, exposar IReadOnlyCollection<T> o usar System.Collections.Immutable per garantir immutabilitat.

Bones pràctiques recomanades per a equips de desenvolupament Evitar exposar camps públics; preferir propietats amb get i init o només getters; usar readonly en camps que han de romandre referenciats al mateix objecte; emprar col·leccions immutables o còpies defensives; aplicar immutabilitat profunda quan el domini ho requereixi fent immutables també els objectes niats; i documentar clarament les decisions de disseny per facilitar manteniment i seguretat, especialment en entorns concurrents.

Impacte en seguretat i qualitat de programari A Q2BSTUDIO combinem aquestes pràctiques amb controls de qualitat, proves automatitzades i principis de disseny segur per oferir programari a mida que compleix requisits de ciberseguretat i escalabilitat. La nostra experiència en intel·ligència artificial IA per a empreses, agents IA, serveis d'intel·ligència de negoci i Power BI ens permet dissenyar solucions que no només funcionen sinó que són mantenibles i segures en entorns cloud com serveis cloud AWS i Azure.

Conclusió readonly evita la reassignació de referències però no garanteix la immutabilitat de l'objecte referenciat. Per obtenir objectes realment immutables cal aplicar un conjunt de tècniques de disseny: propietats init o records, camps readonly, col·leccions immutables i còpies defensives. Si busques desenvolupar aplicacions a mida, programari a mida o integrar intel·ligència artificial i serveis cloud amb enfocament en ciberseguretat i business intelligence, contacta amb Q2BSTUDIO per portar el teu projecte al següent nivell amb solucions en Power BI, agents IA i serveis d'intel·ligència de negoci.

ELS NOSTRES SERVEIS

Com et podem ajudar

Tens un projecte en ment?

Explica'ns la teva visió i la convertim en una solució de programari. Sigui quin sigui l'abast, fem realitat la teva idea.