С#. ООП. Классы 03. C#. ООП. Классы
План лекции q q q q Две роли классов Синтаксис описания класса Модификаторы доступа Методы-свойства Индексаторы Конструкторы класса Пример проектирования класса 03. C#. ООП. Классы 2
Синтаксис описания класса [атрибуты][модификаторы]class имя_класса[: список_родителей] {тело_класса} public class Rational {тело_класса} В теле класса могут быть объявлены: q константы; q поля; q конструкторы и деструкторы; q методы; q события; q делегаты; q классы (структуры, интерфейсы, перечисления). 03. C#. ООП. Классы 3
Методы-свойства Пять наиболее употребительных стратегий: q чтение, запись (Read, Write); q чтение, запись при первом обращении (Read, Write -once); q только чтение (Read-only); q только запись (Write-only); q ни чтения, ни записи (Not Read, Not Write). 03. C#. ООП. Классы 4
Методы-свойства public class Person { //поля (все закрыты) string fam="", status="", health=""; int age=0, salary=0; //методы - свойства ///
Методы-свойства ///
Методы-свойства ///
Пример работы с полями public void Test. Person. Props() { Person pers 1 = new Person(); pers 1. Fam = "Петров"; pers 1. Age = 21; pers 1. Salary = 1000; Console. Write. Line ("Фам={0}, возраст={1}, статус={2}", pers 1. Fam, pers 1. Age, pers 1. Status); pers 1. Fam = "Иванов"; pers 1. Age += 1; Console. Write. Line ("Фам={0}, возраст={1}, статус={2}", pers 1. Fam, pers 1. Age, pers 1. Status); }//Test. Person. Props 03. C#. ООП. Классы 8
Индексаторы const int Child_Max = 20; //максимальное число детей Person[] children = new Person[Child_Max]; int count_children=0; //число детей public Person this[int i] //индексатор { get {if (i>=0 && i< count_children)return(children[i]); else return(children[0]); } set { if (i==count_children && i< Child_Max) {children[i] = value; count_children++; } } } 03. C#. ООП. Классы 9
Индексаторы public void Test. Person. Children() { Person pers 1 = new Person(), pers 2 = new Person(); pers 1. Fam = "Петров"; pers 1. Age = 42; pers 1. Salary = 10000; pers 1[pers 1. Count_children] = pers 2; pers 2. Fam ="Петров"; pers 2. Age = 21; pers 2. Salary = 1000; Person pers 3= new Person("Петрова"); pers 1[pers 1. Count_children] = pers 3; pers 3. Fam ="Петрова"; pers 3. Age = 5; Console. Write. Line ("Фам={0}, возраст={1}, статус={2}", pers 1. Fam, pers 1. Age, pers 1. Status); Console. Write. Line ("Сын={0}, возраст={1}, статус={2}", pers 1[0]. Fam, pers 1[0]. Age, pers 1[0]. Status); Console. Write. Line ("Дочь={0}, возраст={1}, статус={2}", pers 1[1]. Fam, pers 1[1]. Age, pers 1[1]. Status); } 03. C#. ООП. Классы 10
Индексаторы 03. C#. ООП. Классы 11
Конструкторы и деструкторы класса Person pers 1 = new Person(), pers 2 = new Person(); Person pers 3= new Person("Петрова"); static Person() { Console. Write. Line("Выполняется статический конструктор!"); } ~Person() { //Код деструктора } 03. C#. ООП. Классы 12
Пример проектирования класса ///
Конструкторы класса Rational ///
Методы класса Rational ///
Печать рациональных чисел public void Print. Rational(string name) { Console. Write. Line(" {0} = {1}/{2}", name, m, n); } 03. C#. ООП. Классы 16
Тестирование создания рациональных чисел public void Test. Create. Rational() { Rational r 1=new Rational(0, 0), r 2 = new Rational(1, 1); Rational r 3=new Rational(10, 8), r 4 = new Rational(2, 6); Rational r 5=new Rational(4, -12), r 6 = new Rational (-12, -14); r 1. Print. Rational("r 1: (0, 0)"); r 2. Print. Rational("r 2: (1, 1)"); r 3. Print. Rational("r 3: (10, 8)"); r 4. Print. Rational("r 4: (2, 6)"); r 5. Print. Rational("r 5: (4, -12)"); r 6. Print. Rational("r 6: (-12, -14)"); } 03. C#. ООП. Классы 17
Операции над рациональными числами. Сложение public Rational Plus(Rational a) { int u, v; u = m*a. n +n*a. m; v= n*a. n; return( new Rational(u, v)); }//Plus public static Rational operator +(Rational r 1, Rational r 2) { return (r 1. Plus(r 2)); } 03. C#. ООП. Классы 18
Операции над рациональными числами. Сложение public void Test. Plus. Rational() { Rational r 1=new Rational(0, 0), r 2 = new Rational(1, 1); Rational r 3=new Rational(10, 8), r 4 = new Rational(2, 6); Rational r 5=new Rational(4, -12), r 6 = new Rational(-12, -14); Rational r 7, r 8, r 9, r 10, r 11, r 12; r 7 = r 1. Plus(r 2); r 8 = r 3. Plus(r 4); r 9 = r 5. Plus(r 6); r 10 = r 1+r 2; r 11 = r 3+r 4; r 12 = r 5+r 6+r 10+r 11; r 1. Print. Rational("r 1: (0, 0)"); r 2. Print. Rational("r 2: (1, 1)"); r 3. Print. Rational("r 3: (10, 8)"); r 4. Print. Rational("r 4: (2, 6)"); r 5. Print. Rational("r 5: (4, -12)"); r 6. Print. Rational ("r 6: (-12, -14)"); r 7. Print. Rational("r 7: (r 1+r 2)"); r 8. Print. Rational ("r 8: (r 3+r 4)"); r 9. Print. Rational("r 9: (r 5+r 6)"); r 10. Print. Rational ("r 10: (r 1+r 2)"); r 11. Print. Rational("r 11: (r 3+r 4)"); r 12. Print. Rational("r 12: (r 5+r 6+r 10+r 11)"); } 03. C#. ООП. Классы 19
Операции над рациональными числами. Вычитание public Rational Minus(Rational a) { int u, v; u = m*a. n - n*a. m; v= n*a. n; return( new Rational(u, v)); }//Minus public static Rational operator -(Rational r 1, Rational r 2) { return (r 1. Minus(r 2)); } 03. C#. ООП. Классы 20
Операции над рациональными числами. Умножение public Rational Mult(Rational a) { int u, v; u = m*a. m; v= n*a. n; return( new Rational(u, v)); }//Mult public static Rational operator *(Rational r 1, Rational r 2) { return (r 1. Mult(r 2)); } 03. C#. ООП. Классы 21
Операции над рациональными числами. Деление public Rational Divide(Rational a) { int u, v; u = m*a. n; v= n*a. m; return( new Rational(u, v)); }//Divide public static Rational operator /(Rational r 1, Rational r 2) { return (r 1. Divide(r 2)); } 03. C#. ООП. Классы 22
Пример применения public void Test. Oper. Rational() { Rational r 1=new Rational(1, 2), r 2 = new Rational(1, 3); Rational r 3, r 4, r 5, r 6 ; r 3 = r 1 - r 2; r 4 = r 1*r 2; r 5 = r 1/r 2; r 6 = r 3+r 4*r 5; r 1. Print. Rational("r 1: (1, 2)"); r 2. Print. Rational("r 2: (1, 3)"); r 3. Print. Rational("r 3: (r 1 -r 2)"); r 4. Print. Rational("r 4: (r 1*r 2)"); r 5. Print. Rational("r 5: (r 1/r 2)"); r 6. Print. Rational("r 6: (r 3+r 4*r 5)"); } 03. C#. ООП. Классы 23
Вопросы ? ? ? 03. C#. ООП. Классы 24


