Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/18: Рейтинг темы: голосов - 18, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 21.11.2017
Сообщений: 8

Наследование классов - изменить метод базового класса

27.04.2019, 20:05. Показов 3818. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В программе прописан родительский класс (BaseList) и два дочерних (ListChain и MasList). Хотелось бы прописать 2 метода сортировки Sort ( один для листа, второй для массива) так, чтобы метод метод сортировки для массива находился в родительском классе и при его вызове ,не найдя данный метод в дочернем, был использован метод Sort родительского класса, и второй метод Sort для листа был прописан в дочернем классе. Как правильно оформить данные методы? Сам метод Sort писать не нужно.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.04.2019, 20:05
Ответы с готовыми решениями:

Наследование классов: доступность базового класса
Ребят подскажите пожалуйста что не так с наследованием, т.к. компилятор ругается на доступность базового класса хотя везде public using...

Наследование и члены базового класса
Господа скажите пожалуйста, если в базовом классе есть конструктор, который принимает один целочисленный параметр, который в дальнейшем...

Наследование:переменные базового класса
В общем по книге Г.Шилдт делал пример из книги и почему то выдаёт много ошибок. using System; using System.Collections.Generic; ...

6
 Аватар для Kazbek17
1484 / 939 / 454
Регистрация: 06.02.2012
Сообщений: 2,868
27.04.2019, 20:23
Цитата Сообщение от Adamantoz Посмотреть сообщение
В программе прописан родительский класс (BaseList)
Если родительский класс имеет public Method то все дочерние классы будут иметь этот метод.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16139 / 11263 / 2888
Регистрация: 21.04.2018
Сообщений: 33,109
Записей в блоге: 2
27.04.2019, 22:00
Цитата Сообщение от Adamantoz Посмотреть сообщение
Как правильно оформить данные методы? Сам метод Sort писать не нужно.
Используете виртуальный virtual метод - в производном классе его можно переопределить с ключевым словом override.
Или скрывает базовый метод производным с ключевым словом new.

Для переопределённого метода из объекта производного типа доступа к базовому не будет. Для скрытого можно получить доступ к базовому через приведение к базовому типу. Внутри производного класса базовые методы доступны через base.

В обоих случаях необходимо чтобы сигнатуры методов в базовом классе и производных совпадали.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
28.04.2019, 08:24
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Для переопределённого метода из объекта производного типа доступа к базовому не будет.
А как же base?

Цитата Сообщение от Элд Хасп Посмотреть сообщение
Для скрытого можно получить доступ к базовому через приведение к базовому типу.
Или через тот же base.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16139 / 11263 / 2888
Регистрация: 21.04.2018
Сообщений: 33,109
Записей в блоге: 2
28.04.2019, 13:22
Цитата Сообщение от kolorotur Посмотреть сообщение
А как же base?
Я же написал, что из кода класса может быть доступ: Внутри производного класса базовые методы доступны через base.
Но если есть ОБЪЕКТ производного класса, разве можно получить доступ к переопределенному методу базового класса?

Пример для объяснения моей мысли
C#
1
2
3
4
5
6
7
8
9
10
    class BaseClacc
    {
        public virtual int MetodVirt() => 0;
        public string Metod() => "Ноль";
    }
    class  DerivedClacc : BaseClacc
    {
        public override int MetodVirt() => 10;
        public new string Metod() => "Десять";
    }
C#
1
2
3
4
5
    DerivedClacc d = new DerivedClacc();
    BaseClacc b = d;
 
    Console.WriteLine($"Методы производного класса: MetodVirt={d.MetodVirt()}, Metod={d.Metod()}");
    Console.WriteLine($"Методы базового класса: MetodVirt={b.MetodVirt()}, Metod={b.Metod()}");
КонсольМетоды производного класса: MetodVirt=10, Metod=Десять
Методы базового класса: MetodVirt=10, Metod=Ноль
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
28.04.2019, 14:10
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Но если есть ОБЪЕКТ производного класса, разве можно получить доступ к переопределенному методу базового класса?
Конечно:
C#
1
public override int MetodVirt() => 10 + base.MetodVirt(); // 10 + 0
Вызывается реализация базового класса из объекта производного класса.
Или вы что-то другое подразумевали под объектом производного класса?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16139 / 11263 / 2888
Регистрация: 21.04.2018
Сообщений: 33,109
Записей в блоге: 2
28.04.2019, 14:17
Цитата Сообщение от kolorotur Посмотреть сообщение
Вызывается реализация базового класса из объекта производного класса.
Или вы что-то другое подразумевали под объектом производного класса?
Да.
В коде производного класса, конечно, к базовому методу есть доступ.

Но я говорю о другом.
О доступе к базовым методам в экземплярах производного класса.
Если метод скрыт (new), то приведя производный тип к базовому можно получить доступ к базовому методу.
С переопределенным (override) методом так не выйдет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.04.2019, 14:17
Помогаю со студенческими работами здесь

Вызвать метод производного класса из базового класса
namespace patterns { public class BaseClass { public virtual void Action() { ...

Занести из файла объекты производных классов в массив объектов базового класса
Здравствуйте. Что в этом коде изменить, чтобы объекты производных классов заносились из файла? using System; namespace...

Вызывается метод из базового класса
Имеется 2 класса: В 1 классе Data имеются такие методы: private string GetUpdateQuerryString() { string tmp...

Возможно ли некоторые публичные члены базового класса закрыть для производных классов?
Т.е. чтобы некоторые члены были доступны из экземпляра базового класса, но чтобы их невозможно было вызвать из экземпляров производных?

Сортировка: Как отсортировать объекты конечных классов с учетом промежуточного базового класса?
Есть один базовый класс (ClassMain), который наследует три класса (N1 N2 N3), каждый из трех наследников наследует еще по два (N11, N12,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru