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

Наследование в языке C#

  • 👀 685 просмотров
  • 📌 661 загрузка
Выбери формат для чтения
Загружаем конспект в формате pdf
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Конспект лекции по дисциплине «Наследование в языке C#» pdf
Наследование в языке C#. 1)Базовые и производные классы 2) Перегрузка методов базового класса 3) Конструкторы в производных классах 1) Базовые и производные классы в C#. В C# используется только открытое наследование Имеем класс Record (min,sec), введем новый класс Sprint, бег на короткие дистанции, учитывающий десятые доли секунды спортсмена (int dec) . В классе добавим метод Putdec , устанавливающий количество десятых долей и Numberdec, вычисляющий общее число десятых долей секунды у объектов (например, для сравнения результатов). В C# как в C++ объект базового класса, созданный в производном доступа к private и protected полям не имеет. Инкапсуляция: public, private, protected разграничивают доступ к полям и методам. Класс Record - базовый класс Класс Sprint - производный класс using System; using System.Collections.Generic; using System.Linq; using System.Text; class Record { protected int min, sec; // для доступа объектам производных классов public void Init(int m, int s) { min = m; sec = s; } public int Numbersec() { return min * 60 + sec; } } 1 class Sprint : Record // наследование // C++ - public: Record Java - extends Record { private int dec; public void Putdec(int d) { dec=d; } public int Numberdec() { int k; k = 60 * min + sec; // protected return k*10+dec; } } namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Record a=new Record(); Sprint b=new Sprint(); int m,k; a.Init(5, 6); b.Init(5, 6); // наследуемый метод b.Putdec(8); m = b.Numberdec(); k = b.Numbersec(); // вызов наследуемого метода } } } Статические поля и методы нормально наследуются, но копия также одна на все объекты. В C# частично множественное наследование реализуется в интерфейсах. 2 2) Перегрузка методов базового класса в c# Возможна перегрузка метода из базового класса в производном классе. Пример – переопределение Init в Sprint class Sprint : Record { private int dec; .................................. public void Init(int m, int s, int d) // перегрузка { min = m; sec = s; dec = d; } static void Main(string[] args) { Record a=new Record(); Sprint b=new Sprint(); Sprint c = new Sprint(); int m, k; a.Init(5, 6); b.Init(5, 6,9); // вызов перегруженного метода c.Init(5, 6); // вызов наследуемого метода (нет перекрытия как на C++) с.Putdec(8); .................................. Возможна перегрузка метода с теми же аргументами, как и в базовом классе. class Sprint : Record { private int dec; public void Putdec(int d) { dec=d; } public void Init(int m, int s, int d) { min = m; sec = s; dec = d; } public void Init(int m, int s, int d) // вариант с вызовом базового класса { 3 base.Init(m, s); dec = d; } public void Init(int m, int s) // перегрузка базового с теми же аргументами { min = m; sec = s; dec = 1; } static void Main(string[] args) { Record a=new Record(); Sprint b=new Sprint(); Sprint c = new Sprint(); int m, k; a.Init(5, 6); b.Init(5, 6); // вызов перегруженного метода dec=1 c.Init(5, 6, 8); b.Putdec(8); } На C# можно вывести объекты целиком, переводя их в string, перегрузив встроенный метод toString, имеющийся для всех объектов. Пример вывода объекта в C# class Record { protected int min, sec; public Record(int m, int s) { min = m; sec = s; } public override string ToString() // перегрузка встроенного метода перевода полей в строку { string s = ""; s += Convert.ToString(min) + " " + Convert.ToString(sec); return s; } } 4 class Program { static void Main(string[] args) { Record s = new Record(1, 5); Console.WriteLine(s); } } вывод: 1 5 3) Конструкторы в производных классах Конструкторы не наследуются. Правила работы с конструкторами производного класса. Если в базовом классе есть конструктор без параметров, созданный в классе или сгенерированный по умолчанию, при создании объектов производного класса сначала вызывается конструктор базового класса. При вызове деструктора, наоборот, сначала вызывается деструктор производного класса, потом базового. namespace ConsoleApplication1 { class Record { protected int min, sec; public Record(int m, int s) { min = m; sec = s; } } class Sprint: Record { int dec; public Sprint(int m,int s,int d):base(m,s) // вызов конструктора базового класса { dec=d; } } class Program { static void Main(string[] args) { Sprint z = new Sprint(1, 2, 9); } } 5
«Наследование в языке C#» 👇
Готовые курсовые работы и рефераты
Купить от 250 ₽
Решение задач от ИИ за 2 минуты
Решить задачу
Найди решение своей задачи среди 1 000 000 ответов
Найти

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

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

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

Перейти в Telegram Bot