Справочник от Автор24
Поделись лекцией за скидку на Автор24

Классы и объекты на С#. Свойства объектов

  • 👀 622 просмотра
  • 📌 597 загрузок
Выбери формат для чтения
Загружаем конспект в формате pdf
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Конспект лекции по дисциплине «Классы и объекты на С#. Свойства объектов» pdf
Классы и объекты на c#. Свойства объектов. 1) Запись классов и объектов 2) Несколько классов 3) Массивы объектов 4) Присваивание объектов 5) Структуры 6)Массивы вспомогательных объектов 7) Передача аргументов методов, перегрузка функций 8) Указатель (ссылка) на объект, вызывающий метод - this 9) Перегрузка операторов 10) Статические поля и методы 11) Конструкторы инициализации 12) Делегаты на C# 1) Запись классов и объектов на c# Создать новое консольное приложение. Проект - добавить класс имя: Record создан файл Record.cs using using using using System; System.Collections.Generic; System.Linq; System.Text; namespace ConsoleApplication1 { class Record { } } В C# кроме полей и методов имеются свойства (property) для задания доступа к private полям. работа со свойствами Record.cs 1 namespace ConsoleApplication1 { class Record { private int min; private int sec; // поле public int Sec // свойство { get { return sec; } set { if (value >= 0 && value < 60) { sec = value; } } } } } Program.cs namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Record a=new Record(); // как в java инициализация a.Sec = 26; // set - вызов метода у свойства a.Sec=72; // не присвоилось осталось прежнее 26 int b; b = a.Sec; // get - вызов метода у свойства } } } Добавление методов, полный пример класса Record. Record.cs using using using using System; System.Collections.Generic; System.Linq; System.Text; namespace ConsoleApplication1 { class Record { private int min; private int sec; lic int Sec 2 { get { return sec; } set { if (value >= 0 && value < 60) { sec = value; } } } public void Init(int m,int s) { min=m; sec=s; } public void Display() { string s, s1; s1 = Convert.ToString(min); s = "min: "+s1 + " "; s1 = Convert.ToString(sec); s = s + "sec:" + s1; Console.WriteLine(s); } public void Read() { string s=""; s= Console.ReadLine(); string[] s1; s1 = s.Split(new char[] { ' ', '\t' }, StringSplitOptions.RemoveEmptyEntries); min = Convert.ToInt32( s1[0]); sec = Convert.ToInt32(s1[1]); } public int Numbersec() { return min * 60 + sec; // число секунд } public Record Add(Record a, Record b) // сложение 2 Record { Record c; c = new Record(); c.min = a.min + b.min; c.sec = a.sec + b.sec; if (c.sec >= 60) { c.min++; c.sec = c.sec - 60; } return c; // результат тип Record } } } Program.cs 3 using using using using System; System.Collections.Generic; System.Linq; System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Record a=new Record(); a.Sec = 26; a.Sec = 72; // не присвоилось a.sec=26 прежнее значение int k; k = a.Sec; // k=26 Record b = new Record(); b.Init(2, 10); // 2 min, 10 sec b.Display(); Record c = new Record(); c.Read(); c.Display(); k = b.Numbersec(); Console.WriteLine("{0}", k); Record d = new Record(); d = a.Add(b, c); d.Display(); Console.ReadKey(); } } } 2) Несколько классов на C# Record.cs using using using using System; System.Collections.Generic; System.Linq; System.Text; namespace ConsoleApplication1 { 4 class Record { private int min, sec; public void Init(int m, int s) { min = m; sec = s; } public void Display() { string s, s1; s1 = Convert.ToString(min); s = "min: " + s1 + " "; s1 = Convert.ToString(sec); s = s + "sec:" + s1; Console.WriteLine(s); } public int Numbersec() { return min * 60 + sec; // число секунд } public Record Add(Record a, Record b) // сложение 2 Record { Record c; c = new Record(); c.min = a.min + b.min; c.sec = a.sec + b.sec; if (c.sec >= 60) { c.min++; c.sec = c.sec - 60; } return c; // результат тип Record } } } Sportsman.cs using using using using System; System.Collections.Generic; System.Linq; System.Text; namespace ConsoleApplication1 { class Sportsman { private string fam; // фамилия public string Fam // свойство { get { return fam; } } 5 private Record r1 = new Record(); private Record r2 = new Record(); // первый результат // второй результат public void Init(string f, int m1, int s1, int m2, int s2) { fam = f; r1.Init(m1, s1); // задание значений 1 результата r2.Init(m2, s2); // задание значений второго результата } public void Display() { string s; s = "Фамилия: " + fam; Console.WriteLine(s); Console.Write("первый результат: "); r1.Display(); Console.Write("второй результат: "); r2.Display(); } public Record Sumrez() { return r1.Add(r1,r2); } // вывод фамилии // вывод 1 результата // вывод 2 результата // возвращает суммарный результат Record (r1+r2) public Sportsman Better(Sportsman a, Sportsman b) // лучший из 2 спортсменов { int k1, k2; k1 = a.r1.Numbersec() + a.r2.Numbersec(); // общее число секунд первого k2 = b.r1.Numbersec() + b.r2.Numbersec();// общее число секунд второго if (k1 < k2) return a; else return b; } } } Program.cs using using using using System; System.Collections.Generic; System.Linq; System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Sportsman P1,P2,P3; P1 = new Sportsman(); P2 = new Sportsman(); P3 = new Sportsman(); P1.Init("Иванов", 2, 56, 3, 12); 6 P1.Display(); // вывод информации P1 P2.Init("Петров", 2, 48, 3, 19); P3=P3.Better(P1,P2); // P3 - лучший из P1, P2 string s; s = P3.Fam; // s - фамилия лучшего Console.WriteLine("Спортсмен " + s + " лучше"); Record r; r = P3.Sumrez(); // Record r - сумма 2 результатов P3 Console.WriteLine("Его результат:"); r.Display(); Console.ReadKey(); } } } 3) Массивы объектов на C# Массивы объектов аналогичны java Record[] ms; ms = new Record[5]; int i; for(i=0;i<5;i++) { ms[i] = new Record(); // инициализация каждого элемента } for (i = 0; i < 5; i++) { ms[i].Init(1, i); } int[] c = new int[5]; for (i = 0; i < 5; i++) { c[i] = ms[i].Numbersec(); } for (i = 0; i < 5; i++) { Console.WriteLine(Convert.ToString(c[i])); } 4) Присваивание объектов на c# На c# объекты — ссылки при присваивании получаются одинаковые адреса class Record { 7 (1) private int min; private int sec; public void Init(int m,int s) { min=m; sec=s; } public void Display() { string s, s1; s1 = Convert.ToString(min); s = "min: "+s1 + " "; s1 = Convert.ToString(sec); s = s + "sec:" + s1; Console.WriteLine(s); } } static void Main(string[] args) { Record c, d; c = new Record(); d = new Record(); c.Init(3, 5); d.Init(4, 6); c = d; d.Init(7, 8); d.Display(); c.Display(); min: 7 sec: 8 min: 7 sec: 8 // как с указателями на c++ и ссылками на java 5) Структуры на c# Структура на c # аналогична классам на c++ . Объекты структуры не являются ссылками. При присваивании копируются поля. struct Record { private int min, sec; public void Init(int m, int s) { min = m; sec = s; } public void Display() { string s, s1; s1 = Convert.ToString(min); s = "min: " + s1 + " "; s1 = Convert.ToString(sec); s = s + "sec:" + s1; 8 Console.WriteLine(s); } } class Program { static void Main(string[] args) { Record c,d; c = new Record(); d = new Record(); c.Init(3, 5); d.Init(4, 6); c = d; d.Init(7, 8); // у c прежние значения, c,d - различные объекты d.Display(); c.Display(); Console.ReadKey(); } } } min: 7 sec: 8 min: 4 sec: 6 // !!! // как с обычными объектами на c++ Структуры не являются ссылками и их можно не инициализировать new. public int min, sec; ........................... Record c; c.min = 3; c.sec = 4; c.Init(3, 5); c.Display(); min: 3 sec:5 Если записать: private int min, sec; .................... Record c; c.Init(3,5); // ошибка компиляции c - не задано значение, // хотя у структур min=0 sec=0 при определении Record c; 6)Массивы вспомогательных объектов на C# Замена полей объектов вспомогательных классов массивом объектов вспомогательных классов C# 9 Record.cs using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Record { private int min, sec; public void Init(int m, int s) { min = m; sec = s; } public void Display() { string s, s1; s1 = Convert.ToString(min); s = "min: " + s1 + " "; s1 = Convert.ToString(sec); s = s + "sec:" + s1; Console.WriteLine(s); } } } Sortsman.cs using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Sortsman { const int N=20; private string fam; private Record[] records = new Record[N]; // массив результатов (не более N) int n; public void Init(string f) { fam = f; 10 n = 0; // для нового спортсмена результатов нет } public void AddResult(int m, int s) // добавка результата в конец массива { Record c=new Record(); c.Init(m, s); records[n] = c; n++; } public void Display() { int i; Console.WriteLine(fam); for (i = 0; i < n; i++) // вывод всех результатов { records[i].Display(); } } public void Insert(int k,int m,int s) // вставка результата на место k { int i; for(i=n;i>k;i--) { records[i] = records[i - 1]; } Record c=new Record(); c.Init(m, s); records[k] = c; n++; } } } Program.cs using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Sortsman a = new Sortsman(); 11 a.Init("Иванов"); a.AddResult(3, 5); a.AddResult(3, 6); a.AddResult(3, 7); a.AddResult(3, 8); a.AddResult(3, 9); a.Insert(2, 4, 1); a.Display(); Console.ReadKey(); } } } 7) Передача аргументов методов на C# перегрузка функций На C# имеется 2 типа возвращаемого параметра ref и out. Вариант с out using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Record { private int min, sec; public void Init(int m, int s) { min = m; sec = s; } public int Numbersec() 12 { return min * 60 + sec; } public void Numbersec(out int k) // out - возвращаемый параметр { k = min * 60 + sec; } } class Program { static void Main(string[] args) { int k, m, n; Record a = new Record(); a.Init(2, 10); m = a.Numbersec(); // m=130 a.Numbersec(out n); // n=130 при вызове out указывается } } } Вариант с ref using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Record { private int min, sec; public void Init(int m, int s) { min = m; sec = s; } public int Numbersec() { return min * 60 + sec; } public void Numbersec(ref int k) // возвращаемый параметр ref { k = min * 60 + sec; } 13 } class Program { static void Main(string[] args) { int k, m, n; Record a = new Record(); a.Init(2, 10); m = a.Numbersec(); n = 1; // ! перед вызовом ref параметр должен иметь значение a.Numbersec(ref n); // ref при вызове указывается a.Numbersec(ref k); // ! ошибка k – не задано значение } } } Вариант не работает out public void Numbersec(ref out k) // возвращаемый параметр ref { if(k<0) // ! ошибка компиляции. При проверке k должен быть задан k=0; else k = min * 60 + sec; } 8) Указатель (ссылка) на объект, вызывающий метод - this using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Record { private int min, sec; public void Init(int m, int s) { min = m; sec = s; } public Record add(Record a, Record b) // с двумя аргументами { Record c = new Record(); c.min = a.min + b.min; 14 c.sec = a.sec + b.sec; if (c.sec >= 60) { c.min++; c.sec -= 60; } return c; } public Record add(Record b) // с одним аргументом { Record c = new Record(); c.min = this.min + b.min; c.sec =this.sec + b.sec; if (c.sec >= 60) { c.min++; c.sec -= 60; } return c; } } class Program { static void Main(string[] args) { int k, m, n; Record a = new Record(); Record b = new Record(); Record c = new Record(); a.Init(2, 10); b.Init(2, 57); c = c.add(a, b); // можно c=a.add(a,b); c=a+b c: 5 7 c = a.add(b); // c=a+b c: 5 7 } } } 9) Перегрузка операторов на C# Перегрузка бинарных операторов выполняется методом класса с двумя аргументами, унарных с одним аргументом. using System; using System.Collections.Generic; using System.Linq; using System.Text; 15 namespace ConsoleApplication1 { class Record { private int min, sec; public void Init(int m, int s) { min = m; sec = s; } public static Record operator +(Record a, Record b) // Record+Record { Record c; c = new Record(); c.min = a.min + b.min; c.sec = a.sec + b.sec; if (c.sec >= 60) { c.min++; c.sec = c.sec - 60; } return c; } public static Record operator +(Record a, int b) // Record+int { Record c; c = new Record(); c.min = a.min; c.sec = a.sec + b; if (c.sec >= 60) { c.min++; c.sec = c.sec - 60; } return c; } public static Record operator +(int a, Record b) // int+Record { Record c; c = new Record(); c.min = b.min; c.sec = a + b.sec; 16 if (c.sec >= 60) { c.min++; c.sec = c.sec - 60; } return c; } public static Record operator ++(Record x) // ++ один префикс и постфикс! { ++x.min; return x; } } class Program { static void Main(string[] args) { int k, m, n; Record a = new Record(); Record b = new Record(); Record c = new Record(); a.Init(3, 56); b.Init(4, 13); c.Init(5,10); c = a + b; // c: min=8 sec=9 c = c + 50; // c: min=8 sec=59 c = 10 + c; // c: min=9 sec=9 a = a + b + 10; // a: min=8 sec=19 a.Init(3, 5); b = a++; // b: min=4 sec=5 a.Init(3, 5); b = ++a; // b: min=4 sec=5 тоже самое, при присваивании b и a указывают на // ту же память } } } 10) Статические поля и методы на C# Статические (static) поля и методы вызываются не объектами, а классами, они принадлежат классу целиком. Статическое поле имеет одно и тоже значение для всех объектов C++, инициализируется один раз вне функции и если объект изменит его значение, оно изменится для всех объектов. Статические методы могут обращаться только к статическим полям и методам. Пример статического поля и метода в C# 17 Марафонский бег - к min, sec в Record добавлено статическое поле hour (час). Кроме этого добавлен статический метод Roundmin – округление до минут. using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Record { private int min, sec; public static int hour; public void Init(int m, int s) { min = m; sec = s; } // статическое поле static public int Roundmin(Record x) // статический метод { if (x.sec >= 30) { return x.min + 1; } else { return x.min; } } } class Program { static void Main(string[] args) { Record a = new Record(); Record b = new Record(); a.Init(3, 5); b.Init(2, 45); Record.hour = 2; // вызов статического поля через класс! int z; z = Record.Roundmin(b); // вызов статического метода z=3 } } 18 } 11) Конструкторы инициализации на C# Конструкторы – специальные методы класса, имя конструктора совпадает с именем класса и отсутствует тип, в том числе void, вызываются при инициализации объектов. Конструкторы могут быть с числом параметров, равным числу полей, меньшим числом параметров или без параметров. Конструкторов может быть несколько (перегрузка!) using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Record { private int min, sec; public Record(int m, int s) // с двумя параметрами { min = m; sec = s; } public Record(int m) // с одним параметром { min = m; sec = 0; } public Record() // без параметров { min = 0; sec = 1; } ~Record() // деструктор, вызывается перед сборкой мусора, т.е. неизвестно когда { Console.WriteLine("Объект {0} {1} уничтожен", min,sec); } class Program { static void Main(string[] args) { Record a = new Record(3,5); Record b = new Record(2); 19 Record c = new Record(); Record []d =new Record[5]; int i; for (i = 0; i < 5; i++) { d[i] = new Record(i); // конструктор с одним параметром } } } } 12) Делегаты на C# Делегат – объект для вызовов методов с одинаковыми аргументами и возвращаемым типом (одинаковой сигнатурой). Пример. В проекте калькулятор целых чисел имеется ряд вычислительных методов, у всех 2 аргумента целого типа и они возвращают целое число. Объявлен делегат для работы с указанными методами. using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static int Add(int a, int b) { return a + b; } static int Sub(int a, int b) { return a - b; } static int Mult(int a, int b) { return a * b; } 20 static int Div(int a, int b) { return a / b; } public delegate int Calc(int a, int b); // делегат Calc для вычислений static void Main(string[] args) { Calc A = Add; // A экземпляр делегата для сложения int Result; Result = A(4, 6); // вызов метода сложения Result=10 Calc S = Sub; // B экземпляр делегата для вычитания Result = S(6, 2); // вызов метода сложения Result=14 A = Mult; // теперь A для умножения Result = A(3, 5); // вызов метода умножения Result=15 S = Add; S+=Mult; // операции над делегатами S-=Mult; } } } 21
«Классы и объекты на С#. Свойства объектов» 👇
Готовые курсовые работы и рефераты
Купить от 250 ₽
Решение задач от ИИ за 2 минуты
Решить задачу
Помощь с рефератом от нейросети
Написать ИИ

Тебе могут подойти лекции

Смотреть все 588 лекций
Все самое важное и интересное в Telegram

Все сервисы Справочника в твоем телефоне! Просто напиши Боту, что ты ищешь и он быстро найдет нужную статью, лекцию или пособие для тебя!

Перейти в Telegram Bot