Инициализация в классах. Способы инициализации данных в классе. Инициализация переменных базовых типов. Инициализация с помощью инициализаторов объектов
Содержание
- 1. Какие существуют способы инициализации данных в классе при создании объекта класса?
- 2. Общая форма инициализации внутренних данных класса с помощью непосредственного присваивания нужного значения
- 3. Пример инициализации одиночной переменной базового типа в классе
- 4. Пример инициализации массива переменных базового типа в классе
- 5. Использование инициализатора объекта для инициализации объекта класса в другом классе
- 6. Использование инициализатора объекта для инициализации массива объектов в классе
- 7. Использование инициализатора объекта для инициализации структурной переменной в классе
- 8. Пример использования инициализатора объекта для инициализации массива структурных переменных
- 9. Пример инициализации переменной и массива переменных типа перечисление (enum)
- 10. Какие требования накладываются на объявление переменной класса в случае инициализации этой переменной инициализатором объекта?
- Связанные темы
Поиск на других ресурсах:
1. Какие существуют способы инициализации данных в классе при создании объекта класса?
В языке C# создание объекта класса осуществляется с помощью оператора new. Во время создания, внутренние данные (переменные) класса могут быть инициализированы одним из следующих способов:
- с помощью присваивания переменной класса нужного значения при ее объявлении (непосредственная инициализация). Этот способ используется только для переменных базовых типов. Если нужно инициализировать объект класса, то используется инициализатор объектов;
- с помощью конструктора класса;
- с помощью инициализатора объектов. Этот способ применяется для объектов классов или структурных переменных. В этом случае, данные класса должны быть объявлены как общедоступные public.
2. Общая форма инициализации внутренних данных класса с помощью непосредственного присваивания нужного значения
Внутренние данные класса могут быть инициализированы сразу при их объявлении с помощью конструкции вида:
type variable = value;
В этой конструкции переменная с именем variable типа type инициализируется значением value.
3. Пример инициализации одиночной переменной базового типа в классе
Задан класс Month, реализующий месяц года. В классе объявляется одна скрытая переменная month, которая инициализируется значением 5 сразу при объявлении
// класс, реализующий месяц года class Month { // инициализация внутренней переменной при ее объявлении int month = 5; public int GetMonth() { return month; } public void SetMontgh(int _month) { month = _month; } }
Демонстрация использования объекта класса Month в другом программном коде
Month mn = new Month(); int t = mn.GetMonth(); // t = 5
4. Пример инициализации массива переменных базового типа в классе
Демонстрируется инициализация массива из 5 чисел типа double, который объявлен в классе ArrayDouble5.
// класс, реализующий массив из 5 чисел типа double class ArrayDouble5 { // инициализация массива при его объявлении double[] A = { 3.5, 8.2, 1.6, 2.8, -0.0025 }; // методы доступа // взять элемент массива с индексом index public double GetAi(int index) { if ((index >= 0) && (index < 5)) return A[index]; return 0.0; } // записать новое значение в элемент массива public void SetAi(int index, double value) { if ((index >= 0) && (index < 5)) A[index] = value; } }
Использование класса может быть следующим
// инициализация массива в классе ArrayDouble5 ad = new ArrayDouble5(); double val = ad.GetAi(3); // val = 2.8 val = ad.GetAi(4); // val = -0.0025
5. Использование инициализатора объекта для инициализации объекта класса в другом классе
Демонстрируется инициализация объектов классов с помощью инициализаторов объектов. Заданы три класса Line, Triangle, Figures. В классе Line объявляются общедоступные (public) переменные, описывающие координаты отрезка на плоскости. В классе Triangle объявляются общедоступные (public) переменные, задающие координаты точек треугольника.
В классе Figures объявляются два объекта (экземпляры) классов Line и Triangle. В классе Figures осуществляется инициализация объектов классов Line и Triangle с помощью инициализаторов объектов.
// класс, реализующий линию на координатной плоскости class Line { public int x1, y1, x2, y2; } // класс, описывающий треугольник на координатной плоскости class Triangle { public int x1, y1, x2, y2, x3, y3; } // класс, реализующий фигуру class Figures { // инициализация объекта класса Line ln = new Line { x1 = 0, y1 = 3, x2 = 2, y2 = 5 }; Triangle tr = new Triangle { x1 = 1, y1 = 1, x2 = 4, y2 = 0, x3 = 2, y3 = 1 }; // методы доступа public Line GetLine() { return ln; } public Triangle GetTriangle() { return tr; } }
Демонстрация использования класса Figures
Figures fg = new Figures(); Line ln; Triangle tr; int t; ln = fg.GetLine(); t = ln.x2; // t = 2 t = ln.y1; // t = 3 tr = fg.GetTriangle(); t = tr.y2; // t = 0 t = tr.x3; // t = 2
6. Использование инициализатора объекта для инициализации массива объектов в классе
В примере продемонстрирована инициализация массива объектов типа Worker в классе Workers. Инициализация осуществляется с помощью инициализатора объектов.
// класс, описывающий работника class Worker { // обязательно с модификатором доступа public public string name; // Ф.И.О. работника public int age; // возраст public double salary; // зарплата } // класс, в котором объявляется массив из 3 объектов типа Worker class Workers { public Worker[] wr = { new Worker { name = "Filippov F.F.", age = 35, salary = 70320.55 }, new Worker { name = "Johansonn S.", age = 37, salary = 66670.57 }, new Worker { name = "Gustaffson G.G.", age = 69, salary = 129380.55 } }; }
Важно: для того, чтобы можно было инициализировать массив Worker[] в классе Workers, нужно чтобы данные класса Worker были объявлены с модификатором доступа public.
Использование массива объектов wr может быть следующим:
Workers W = new Workers(); string name; int age; double salary; name = W.wr[1].name; // name = Johansonn S. age = W.wr[1].age; // age = 37 salary = W.wr[1].salary; // salary = 66670.57
7. Использование инициализатора объекта для инициализации структурной переменной в классе
Объявляется структура Book, реализующая книгу. В классе CBook демонстрируется инициализация структурной переменной типа Book.
Инициализация возможна только тогда, когда структурная переменная в классе представлена как тип-ссылка. Это значит, что для структурной переменной выделяется память оператором new.
// структура, которая описывает книгу struct Book { public string title; // название книги public string author; // Ф.И.О. автора public int year; // год выпуска public float price; // стоимость книги } class CBook { // инициализация структурной переменной в классе как типа-ссылки public Book b = new Book { title = "Tell the time 5+", author = "H. Cather", year = 2017, price = 110.00f }; }
Использование объекта класса CBook может быть следующим:
// объект класса CBook CBook cb = new CBook(); string ttl = cb.b.title; // ttl = "Tell the time 5+"
Важно: для того, чтобы можно было инициализировать объект b типа Book в классе CBook, поля структуры (title, author, year, price) должны быть объявлены как public.
8. Пример использования инициализатора объекта для инициализации массива структурных переменных
В данном примере демонстрируется объявление и инициализация массива структур типа Book в классе CBook.
// структура, описывающая книгу struct Book { public string title; // название книги public string author; // Ф.И.О. автора public int year; // год выпуска public float price; // стоимость книги } class Books { // инициализация массива структурных переменных в классе public Book[] B = { new Book { title = "Computer coding for kids", author = "Carol Vorderman", year = 2015, price = 320.00f }, new Book { title = "Math and English", author = "Paul Broadbent", year = 2015, price = 310.00f }, new Book { title = "Spelling 5+", author = "Hannah Catner", year = 2017, price = 0.00f } }; }
Использование объекта класса Books в другом программном коде
// объект класса Books Books bk = new Books(); string author = bk.B[2].author; // author = "Hannah Catner"
9. Пример инициализации переменной и массива переменных типа перечисление (enum)
Задано перечисление Months, определяющее месяцы года. В примере демонстрируется:
- инициализация переменной типа перечисление Months в классе CMonths. Инициализируются 3 переменные (члены данных класса) с именами mn1, mn2, mn3;
- инициализация массива переменных типа перечисление Months в классе CMonths.
// месяц года enum Months { Jan = 1, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec } // класс, в котором инициализируются внутренние переменные типа перечисление class CMonths { public Months mn1 = Months.Feb; public Months mn2 = Months.Jun; public Months mn3 = Months.Nov; // массив переменных типа перечисление Months[] array = { Months.Sep, Months.Jun, Months.Jan }; }
10. Какие требования накладываются на объявление переменной класса в случае инициализации этой переменной инициализатором объекта?
Чтобы инициализировать переменную класса с помощью инициализатора объекта, эта переменная должна быть объявлена как общедоступная с модификатором доступа public. В противном случае компилятор выдаст сообщение об ошибке:
Variable is inaccessible due to its protection level
где variable – название переменной в классе, которое нужно инициализировать.
Связанные темы
- Инициализация данных в классе. Конструктор класса. Конструктор по умолчанию
- Динамическое выделение памяти. Оператор new. Выделение памяти для типов-значений, структур, перечислений, объектов классов. Выделение памяти для массивов
- Понятие класса. Общая форма объявления класса. Объект класса. Поля класса. Примеры.Ключевое слово this. Вложенные классы