A const módosító minden olyan mezőre alkalmazható (és általában alkalmazni is kell), amelynek az értéke fordítási időben ismert, és nem változik a program élettartama alatt.
private const int num = 1729;
public const string title = "Grand" + " Master";
A readonly módosító minden olyan mezőre alkalmazható (és általában alkalmazni is kell), amelyet nem lehet const-tá tenni, amelynek az értéke nem változik a program élettartama alatt, és amely vagy egy soron belüli kezdőértékkel, vagy a példányosítás során kap értéket (a konstruktorban vagy egy konstruktor által hívott metódusban).
private readonly int num;
private readonly System.Random rand = new System.Random();
public MyClass(int num)
{
this.num = num;
}
Biztonságra érzékeny helyzetekben (vagy akár csak egy nagy kódbázison, ahol a fejlesztőknek különböző prioritásaik és szándékaik vannak) arra kell törekedned, hogy egy osztály nyilvános API-ját ne lehessen megkerülni azzal, hogy egy metódus módosítható paramétereit elfogadod és eltárolod, vagy hogy egy osztály módosítható tagját visszatérési értékként vagy out paraméterként kiadod.
Bár a readonly módosító megakadályozza, hogy egy mező értékét vagy referenciáját felülírják, a referenciatípus tagjait semmilyen módon nem védi.
readonly List<int> ints = new List<int>();
void Foo()
{
ints.Add(1); // ok
ints = new List<int>(); // fails to compile
}
Ahhoz, hogy egy referenciatípus minden tagja védve legyen, a mezőket readonly-vá teheted, az automatikus tulajdonságokat pedig set elérő nélkül definiálhatod.
A Base Class Library (BCL) biztosít néhány csak olvasható változatot azokból a gyűjteményekből, amelyeknél meg kell akadályozni, hogy a gyűjtemény tagjai frissüljenek. Ezek burkolók formájában érkeznek:
ReadOnlyDictionary<T> a Dictionary<T>-t csak olvashatóként teszi elérhetővé.ReadOnlyCollection<T> a List<T>-t csak olvashatóként teszi elérhetővé.Az a hitelesítési rendszer, amelyet legutóbb a(z) developer-privileges feladatban láttál, egy kis figyelmet igényel. Azzal bíztak meg, hogy tisztítsd meg a kódot. Egy ilyen kódtisztítási projekt nemcsak megkönnyíti a jövőbeli karbantartók dolgát, hanem néhány biztonsági sebezhetőséget is felszínre hoz és kijavít.
const módosítóvalEz egy refaktorálási részfeladat. Add hozzá a const módosítót az Authenticator vagy Identity azon tagjaihoz, amelyeket megfelelőnek tartasz.
readonly módosítóvalEz egy refaktorálási részfeladat. Add hozzá a readonly módosítót az Authenticator osztály vagy az Identity struct azon mezőihez, amelyeket megfelelőnek tartasz.
Távolítsd el a set elérőt, vagy tedd private-vá a megfelelő tulajdonságokon az Authenticator osztályban vagy az Identity structban.
Jelenleg az admin identitásmezőt az Admin hívása adja vissza. Ez nem ideális, mert a hívó módosíthatja a mezőt. Találj egy módot arra, hogy a hívó ne módosíthassa az admin adatait az Authenticator objektumon.
Jelenleg a beégetett, kiváltságos fejlesztői identitásokat tartalmazó szótárat a GetDevelopers() hívása adja vissza. Ez nem ideális, mert a hívó módosíthatja a szótárat. Találj egy módot arra, hogy a hívó ne módosíthassa a fejlesztők adatait az Authenticator objektumon.
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) C# nyelvet 62 fogalom178 feladat segítségével, valódi emberi mentorálással, mindez ingyen.