Innehållsförteckning:
Definition - Vad betyder Mutable Type?
Muterbar typ, i C #, är en typ av objekt vars datamedlemmar, såsom egenskaper, data och fält, kan ändras efter skapandet.
Muterbara typer används i parallella applikationer, där objekten av den muterbara värdetypen bibehålls i bunten av Common Language Runtime (CLR). Detta ger en viss optimering, vilket gör det snabbare än heap-allokerade objekt. För att förhindra att synkroniseringsfel uppstår i parallella applikationer på grund av flera trådar som har åtkomst till den delade datan, används muterbara typer med någon form av låsmekanism.
På grund av dess inneboende karaktär kan data om muterbar typ modifieras under körning, så att den muterbara typen ofta används när objektet innehåller en stor mängd utbytbar data. Även om den muterbara typen inte är lika trådsäker och säker som obrukbar typ, används den oftare med variabler av värdetyp som får allokeras i bunten, vilket förbättrar prestandan.
Techopedia förklarar Mutable Type
Alla inbyggda värdetyper som int, dubbel, etc., är muterbara typer och kan göras oföränderliga genom att lägga till modifieraren "readonly" före variablerna. Om en muterbar referenstyp anges med en läsmodifierare genererar C # -kompilatorn en varning. Genom att lägga till en readonly modifierare till ett fält av referenstyp kan fältet inte ersättas med en annan instans av referenstypen, men tillåter att instansdata för fältet kan ändras genom referenstypen.
Till exempel är StringBuilder en muterbar referenstyp i .NET-rambiblioteket, genom vilket strängvärdet för en instans som skapats av denna typ kan ändras genom att lägga till, ta bort, ersätta eller infoga tecken.
En muterbar typ bör inte härledas från en immutable typ eftersom det finns en möjlighet för en virtuell metod i den härledda klassen att åsidosätta den så att de immutable medlemmarna skrivs över.
Den huvudsakliga begränsningen för den muterbara typen är att medan ett objekt av muterbär typ (som struktur) överförs genom tilldelning av en lokal variabel eller som en parameter till en metod, överförs värdet på objektet och inte själva objektet. Genom detta muteras kopian av objektet och inte originalet. Detta beteende kan leda till oväntade buggar.
