public readonly struct Point3D { public double X { get; } public double Y { get; } public double Z { get; } public Point3D(double x, double y, double z) { X = x; Y = y; Z = z; } }
Jakie zalety powoduje dodanie słówka readonly w przypadku struktur?
- struktura jest całkowicie niemodyfikowalna z zewnątrz i wewnątrz
- wszystkie pola muszą być typu readonly
- właściwości nie mogą posiadać setterów
Oprócz powyższych zalet jest jeszcze jednak o której warto wspomnieć a dotyczy ona - wydajności. Jeżeli w jakimś innym typie zadeklarujemy obiekt struktury tylko do odczytu jako pole / właściwość readonly kompilator może uniknąć kopiowania jej gdy ktoś z niej skorzysta. Przykład:
class Program { static void Main(string[] args) { var rectangle = new Rectangle(new Point3D(1, 2, 3)); var calculationResult = rectangle.A.DoSomeCalculation(); Console.WriteLine(calculationResult); } } public class Rectangle { public Point3D A { get; } public Rectangle(Point3D a) { A = a; } } public readonly struct Point3D { public double X { get; } public double Y { get; } public double Z { get; } public Point3D(double x, double y, double z) { X = x; Y = y; Z = z; } public double DoSomeCalculation() { return X * Y * Z; } }
Normalnie kompilator C# stworzyłby kopię obiektu Point3D podczas dostępu do niego ze zmiennej rectanble. Kompilator nie wie czy struktura może spowodować zmianę w niej np. poprzez wywołanie metody DoSomeCalculation(). Jednak jako że struktura jest oznaczona słowem readonly nie zostanie wykonana jego kopia i kompilator wie, że ma wykonać metodę DoSomeCalculation bezpośrednio na obiekcie składowy rectangle.
Brak komentarzy:
Prześlij komentarz