Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю - Страница 126
- Предыдущая
- 126/642
- Следующая
class Point{ public int X { get; set; } public int Y { get; set; } public PointColorEnum Color{ get; set; } public Point(int xVal, int yVal) { X = xVal; Y = yVal; Color = PointColorEnum.Gold; } public Point(PointColorEnum ptColor) { Color = ptColor; } public Point() : this(PointColorEnum.BloodRed){ } public void DisplayStats() { Console.WriteLine("[{0}, {1}]", X, Y); Console.WriteLine("Point is {0}", Color); }}Посредством нового конструктора теперь можно создавать точку золотистого цвета (в позиции (90, 20)):
// Вызов более интересного специального конструктора// с помощью синтаксиса инициализации.Point goldPoint = new Point(PointColorEnum.Gold){ X = 90, Y = 20 };goldPoint.DisplayStats();Инициализация данных с помощью синтаксиса инициализации
Как кратко упоминалось ранее в главе (и будет подробно обсуждаться в главе 6), отношение "имеет" позволяет формировать новые классы, определяя переменные-члены существующих классов. Например, пусть определен класс
RectanglePointnullusing System;namespace ObjectInitializers{ class Rectangle { private Point topLeft = new Point(); private Point bottomRight = new Point(); public Point TopLeft { get { return topLeft; } set { topLeft = value; } } public Point BottomRight { get { return bottomRight; } set { bottomRight = value; } } public void DisplayStats() { Console.WriteLine("[TopLeft: {0}, {1}, {2} BottomRight: {3}, {4}, {5}]", topLeft.X, topLeft.Y, topLeft.Color, bottomRight.X, bottomRight.Y, bottomRight.Color); } }}С помощью синтаксиса инициализации объектов можно было бы создать новую переменную
RectanglePoint// Создать и инициализировать объект Rectangle.Rectangle myRect = new Rectangle{ TopLeft = new Point { X = 10, Y = 10 }, BottomRight = new Point { X = 200, Y = 200}};Преимущество синтаксиса инициализации объектов в том, что он по существу сокращает объем вводимого кода (предполагая отсутствие подходящего конструктора). Вот как выглядит традиционный подход к созданию похожего экземпляра
Rectangle// Традиционный подход.Rectangle r = new Rectangle();Point p1 = new Point();p1.X = 10;p1.Y = 10;r.TopLeft = p1;Point p2 = new Point();p2.X = 200;p2.Y = 200;r.BottomRight = p2;Поначалу синтаксис инициализации объектов может показаться несколько непривычным, но как только вы освоитесь с кодом, то будете приятно поражены тем, насколько быстро и с минимальными усилиями можно устанавливать состояние нового объекта.
Работа с константными полями данных и полями данных, допускающими только чтение
Иногда требуется свойство, которое вы вообще не хотите изменять либо с момента компиляции, либо с момента его установки во время конструирования, также известное как неизменяемое. Один пример уже был исследован ранее — средства доступа только для инициализации. А теперь мы займемся константными полями и полями, допускающими только чтение.
Понятие константных полей данных
Язык C# предлагает ключевое слово
const- Предыдущая
- 126/642
- Следующая
