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

Наследование

20.11.2015, 21:46. Показов 1279. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Ребят, помогите, пожалуйста, разобраться.
Вопрос задам на элементарном примере.

есть базовый класс peoples, который имеет два открытых свойства name и surname.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class peoples
{
    // Конструктор
    public peoples(string Name, string Surname)
    {
        name = Name;
        surname = Surname;
    }
    // свойства
    public string name { get; set; }
    public string surname { get; set; }
 
   
}
Есть наследник people, он пока имеет одно свойство age. ему присваивается значение в конструкторе, а значения свойствам базового класса, допустим, присвою потом через метод...

C#
1
2
3
4
5
6
7
8
9
10
class people:peoples
    {
        public people(int age) 
        {
            Age = age;
            
        }
         
        public int Age { get; set; }
    }
и тут ошибка: peoples не содержит конструктор, который принимает 0 аргументов.
пока рассуждал, как задать вопрос, сам понял, наверное правильно, в чем дело..
получается, что если мы не передаем параметры одному из конструкторов базового класса из конструктора наследника посредством ключевого слова base, запускается стандартный...
а зачем он запускается - то? если я может не собираюсь обращаться к полям базового класса?

Выход только один, в базовом классе вернуть стандартный конструктор с 0 аргументов?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.11.2015, 21:46
Ответы с готовыми решениями:

Наследование интерфейса и наследование реализации
Начал читать книгу GoF и сразу же в предисловии попал в тупик. Чем отличается наследование интерфейса от наследования реализации? Что такое...

Наследование С# , наследование полей
В классе есть приватное ПОЛЕ . Мне нужно использовать его в классе потомке . Можно это не сделать не делая поле публичным .

Наследование
Привет формчане, помогите пожалуйста. Вообще ничего не понимаю в наследовании. Спасибо Задание 1 Определить иерархию классов (в...

4
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
20.11.2015, 22:09
Цитата Сообщение от PaskalisT Посмотреть сообщение
Выход только один, в базовом классе вернуть стандартный конструктор с 0 аргументов?
можно передать в базовый что-либо, например null или пустые строки
C#
1
2
3
4
public people(int age) : base(null, null)
{
    Age = age;
}
Добавлено через 1 минуту
или
C#
1
2
3
4
5
6
7
8
9
10
class people : peoples
{
    public people(int age)
        : base(string.Empty, string.Empty)
    {
        Age = age;
    }
 
    public int Age { get; set; }
}
1
8 / 8 / 0
Регистрация: 02.09.2013
Сообщений: 131
21.11.2015, 11:06  [ТС]
Спасибо! Т.е. в базовом классе обязательно должен быть запущен хоть один конструктор и об этом нужно косвенно позаботиться...
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
21.11.2015, 11:18
PaskalisT, объяви второй конструктор и все:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class peoples
{
    // Конструктор
    public peoples(string Name, string Surname)
    {
        name = Name;
        surname = Surname;
    }
    // свойства
    public string name { get; set; }
    public string surname { get; set; }
 
 
    protected peoples()
    {
    }
}
Но вообще это идеологически неправильно, что у человека нет имени и фамилии
1
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,233
21.11.2015, 13:29
Лучший ответ Сообщение было отмечено PaskalisT как решение

Решение

Цитата Сообщение от PaskalisT Посмотреть сообщение
Т.е. в базовом классе обязательно должен быть запущен хоть один конструктор и об этом нужно косвенно позаботиться...
PaskalisT, смысл в том, что если вы создаете объект-наследник, то объект базового класса тоже должен быть создан. По умолчанию компилятор использует конструктор базового класса по-умолчанию.
Если в базовом классе (да и вообще в любом классе) не определены публичные конструкторы, то компилятор сам создает конструктор по умолчанию, однако вы определили конструктор с параметрами, поэтому нужно
1) уже явным образом определить конструктор по умолчанию
2) либо при создании наследников использовать конкретные конструкторы базового класса при помощи base
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.11.2015, 13:29
Помогаю со студенческими работами здесь

Наследование
Всем вечер добрый, такой вопрос возник. Почитал,что в шарпах можно наследовать только 1 класс, а может есть какой-то обход данного правила?...

Наследование
Здравствуйте. Дано: public interface ICounterTransformerBaseElements:IDatesElements,ICommonElements { } public interface...

Наследование
Добрвый вечер! Запутался с наследием. Да и вообще ноль пока в C#. Задача стоит в том чтобы найти площадь RightTriangle...

Наследование
Добрый день,уважаемые программисты!.У меня завал по программированию:cry:Я не успеваю сделать все лабы.Если у вас есть возможность...

наследование
Построить иерархию классов... рабочий,кадры,инженер,администрация Добавлено через 16 минут Срочно помогитеЗа создание дублей тем в...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru