1 / 1 / 1
Регистрация: 13.08.2015
Сообщений: 45
1

Наследование конструктора без изменений

11.11.2017, 18:03. Показов 2726. Ответов 4

Author24 — интернет-сервис помощи студентам
Привет киберфорум!
Решаю простую задачу, столкнулся с тем, что ни где не могу найти примера наследования конструктора, который в наследуем классе ни как не отличается от базового
Этот код работает:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    public class ОбъектВМире // базовый класс
    {
        protected int X;
 
        public ОбъектВМире(int X) // конструктор
        {
            this.X = X;
        }
    }
 
    public class Стена : ОбъектВМире // наследник
    {
        public Стена(int X) : base(X) { } // Наследование базового конструктора, это работает
    }
Но получается, если я захочу добавить в конструктор базового класса еще один аргумент, то придется дописывать изменения в каждом наследуемом классе, например:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    public class ОбъектВМире // базовый класс
    {
        protected int X;
        protected int Y; // новая переменная
 
        public ОбъектВМире(int X, int Y) // конструктор
        {
            this.X = X;
            this.Y = Y;
        }
    }
 
    public class Стена : ОбъектВМире // наследник
    {
        public Стена(int X, int Y) : base(X, Y) { } // Наследование базового конструктора, это работает
    }
Возможно ли написать так, чтобы при внесении изменений в конструктор базового класса не приходилось лезть в конструкторы всех наследников (который не отличается от базового) и добавлять там int Y?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.11.2017, 18:03
Ответы с готовыми решениями:

Наследование конструктора с ключевым словом base
Добрый вечер. Видимо совсем уже отупеваю не могу в упор понять логику работы base, хотя догадываюсь...

Наследование конструктора вызывает ошибку 'DP_3.CMatrix' does not contain a constructor that takes 2 arguments
Здравствуйте! Пишу следующий код: interface IMatrix { int Column { get; } ...

Как вызвать нестатический метод из нестатического класса без конструктора?
Доброго времени суток всем читающим! Вопрос касается библотеки Winium.Cruciatus, предназначенной...

Не имеющий конструктора без параметров базовый класс (аргументов) не разрешает плодить наследников
Здравствуйте, никак не могу понять, в чём проблема. Возникла необходимость переопределить...

4
Эксперт .NET
10982 / 6904 / 1559
Регистрация: 25.05.2015
Сообщений: 20,832
Записей в блоге: 14
11.11.2017, 18:45 2
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class ОбъектВМире // базовый класс
    {
        protected int X;
        protected int Y; // новая переменная
 
        public ОбъектВМире(int X) // конструктор
        {
            this.X = X;
            this.Y = 0;
        }
 
        public ОбъектВМире(int X, int Y) // конструктор
        {
            this.X = X;
            this.Y = Y;
        }
    }
 
    public class Стена : ОбъектВМире // наследник
    {
        public Стена(int X) : base(X) { } // Наследование базового конструктора, это работает
    }
1
Эксперт .NET
1843 / 1351 / 427
Регистрация: 10.06.2011
Сообщений: 2,127
11.11.2017, 18:55 3
Лучший ответ Сообщение было отмечено babanty как решение

Решение

Цитата Сообщение от babanty Посмотреть сообщение
Возможно ли написать так, чтобы при внесении изменений в конструктор базового класса не приходилось лезть в конструкторы всех наследников (который не отличается от базового) и добавлять там int Y?
Я думаю, что здесь идёт речь о рефакторинге следующего вида: выделение множества агрументов в объект
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class Point
{
    public int X;
    public int Y;
}
 
public class ОбъектВМире // базовый класс
{
    protected Point Location;
 
    public ОбъектВМире(Point location) // конструктор
    {
        this.Location = location;
    }
}
 
public class Стена : ОбъектВМире // наследник
{
    public Стена(Point location) : base(location) { } // Наследование базового конструктора, это работает
}
1
1 / 1 / 1
Регистрация: 13.08.2015
Сообщений: 45
11.11.2017, 22:36  [ТС] 4
Все так просто оказывается! Спасибо, то что нужно.
0
3564 / 2505 / 1174
Регистрация: 14.08.2016
Сообщений: 8,211
12.11.2017, 00:37 5
емнип, конструктор не наследуется, если что
0
12.11.2017, 00:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.11.2017, 00:37
Помогаю со студенческими работами здесь

Вызов конструктора из конструктора и проверка правильности передаваемых параметров
Существует такой код: public Matrix(Double array) : this(array.GetLength(0),...

Наследование интерфейса без реализации дочерних методов
Имеется интерфейс вида: public interface IRepository<T> where T: class { T...

Как создаются классы, их наследование, конструкторы с параметрами и без
обьясните пожалуйсто на примере с коментариями как создаются классы,их наследование. конструкторы с...

Вызов конструктора из конструктора - ошибка
Айм водеринг. Но разве из одного конструктора нельзя вызвать другой (из StadoOvechek() вызвать...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru