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

Пути решения наследования

08.07.2013, 14:32. Показов 1836. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Помогите мне решить такую проблему. Из главного класса я хочу использовать какое то свойство в дочернем, но в итоге ничего не получается. И самое главное можно это решить без конструктора? Вот простой пример:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
using System;
using System.Text;
 
namespace try12
{
    class test1
    {
        public int x { get; set; }
    }
    class Test2 : test1
    {
        public void MyMethod()
        {
            Console.WriteLine(base.x + 20);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            test1 x = new test1();
            x.x = 100;
            Test2 x1 = new Test2();
            x1.MyMethod();
        }
    }
}
Заранее спасибо
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.07.2013, 14:32
Ответы с готовыми решениями:

База данных в программе: какие пути решения?
Приветствую! Подскажите как оптимальнее решить поставленную задачу? Задача: Необходимо создать приложение "Менеджер...

Qrc - out of memory. Пути решения?
При компиляции проекта с большим количеством файлов в ресурсах, компилятор падает с ошибкой: cc1plus.exe:-1: error: out of memory...

Укажите ошибки и пути их решения
#include <stdlib.h> #include <stdio.h> int main(int argc, char* argv) { const n = 8; float m; ...

27
 Аватар для mrReptiloid
313 / 176 / 25
Регистрация: 30.04.2011
Сообщений: 1,469
08.07.2013, 14:42
хрень какая-то.А без конструктора можно(точнее нужно),если класс static.
0
25 / 25 / 4
Регистрация: 01.07.2013
Сообщений: 53
08.07.2013, 14:51
Я человек начинающий, но как могу помогу.
1. В твоём примере нет вызова метода из родительского класса. Свойство х - автоматически является и свойством дочернего класса.
2. base нужно исспользовать если ты перегружаешь метод из родительского класса в дочернем, для вызова "родительской" версии. В твоём примере перегрузки нет
3.
C#
1
2
test1 x = new test1();
x.x = 100;
и
C#
1
2
Test2 x1 = new Test2();
x1.MyMethod();
- это два разных объекта. Один из которых получается из родительского класса, второй из дочернего.

результат 20 получается потому, что при создание объекта х1, его свойство х инициализируется 0.
1
 Аватар для mrReptiloid
313 / 176 / 25
Регистрация: 30.04.2011
Сообщений: 1,469
08.07.2013, 14:57
_shtaket, Вы не правильно поняли про наследование:что это такое и с чем его едят.Я хотел,чтобы Вы сами разобрались(т.к. это важная тема),но увы..Совет-читайте внимательнее..
0
6 / 6 / 3
Регистрация: 20.04.2013
Сообщений: 77
08.07.2013, 16:11  [ТС]
Vtiratelj, Я вот не совсем понял... вы сказали что у меня нет перегрузки base? но я ее использую вот в этой строке
C#
1
Console.WriteLine(base.x + 20);
и все равно толку 0.
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
08.07.2013, 16:27
Да там вообще слово base не нужно, свойство и так доступно.

Добавлено через 2 минуты
Ты используешь в классе наследнике свойство дочернего класса. И что у тебя не получается? Запустил у себя твой код, всё работает как надо.

Добавлено через 1 минуту
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
using System;
 
namespace ConsoleApplication1
{
    class Test1
    {
        public int X { get; set; }
    }
 
    class Test2 : Test1
    {
        public int MethodDyadiBori()
        {
            return X + 20;
        }
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            Test1 t1 = new Test1();
            t1.X = 100;
 
            Test2 t2 = new Test2();
            Console.WriteLine(t2.MethodDyadiBori());
 
            Console.ReadKey();
        }
    }
}
Ну и что тут по твоему не работает?
0
25 / 25 / 4
Регистрация: 01.07.2013
Сообщений: 53
08.07.2013, 16:29
Цитата Сообщение от _shtaket Посмотреть сообщение
Vtiratelj, Я вот не совсем понял... вы сказали что у меня нет перегрузки base? но я ее использую вот в этой строке
C#
1
Console.WriteLine(base.x + 20);
и все равно толку 0.
а тебе хочется получить результат 120?
сделай так и попробуй понять, что произошло
C#
1
2
3
4
5
6
7
8
static void Main(string[] args)
{
  test1 x = new test1();
  x.x = 100;
  Test2 x1 = new Test2();
  x1.x = x.x;
  x1.MyMethod();
}
1
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
08.07.2013, 16:32
t1 и t2 это 2 разных объекта и у них у каждого свои свойства. У t1 свойство X имеет значение 100, у второго объекта X = 0, а на экран выводится 20, потому что так задумано.

Добавлено через 26 секунд
Надо было ещё и классы назвать X

Добавлено через 7 секунд
И метод тоже

Добавлено через 1 минуту
И ник ещё
0
6 / 6 / 3
Регистрация: 20.04.2013
Сообщений: 77
08.07.2013, 16:40  [ТС]
Vtiratelj, Ну я понимаю почему так работает. Я просто не совсем понимаю почему свойство определяется как свойство дочернего класса.

Добавлено через 3 минуты
Casper-SC, Вот почему у класса test2 тоже есть свойство Х? если я его не создавал...

Добавлено через 1 минуту
Casper-SC, И вот в твоем примере тоже получается 20
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
08.07.2013, 16:47
Потому что Test2 это наследник класса Test1. Сами классы это шаблоны, по которым создаются объекты в памяти. Представь чертёж одноэтажного дома Test1, потом этот чертёж дополняют и дорисовывают второй этаж и называют его Test2. Потом по шаблону Test2 строят дом и у него же будет тоже первый этаж (свойство X), так и тут.

Добавлено через 1 минуту
Унаследовать от Test1 это распечатать копию чертежа с одним этажём и дорисовать в него дополнения.
1
6 / 6 / 3
Регистрация: 20.04.2013
Сообщений: 77
08.07.2013, 16:51  [ТС]
Casper-SC, Толково объяснил Вот можешь мне помочь... Как сделать так что бы я свойства мог использовать в других классах с значениям которое я задаю заранее

Добавлено через 1 минуту
Цитата Сообщение от Casper-SC Посмотреть сообщение
Унаследовать от Test1 это распечатать копию чертежа с одним этажём и дорисовать в него дополнения.
т.е. только можно сделать через присваивание?
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
08.07.2013, 16:54
Цитата Сообщение от _shtaket Посмотреть сообщение
Casper-SC, И вот в твоем примере тоже получается 20
Потому что метод возвращает 20, так и должно быть.
0
 Аватар для Евгений В
912 / 672 / 134
Регистрация: 01.03.2010
Сообщений: 1,279
08.07.2013, 16:55
Цитата Сообщение от _shtaket Посмотреть сообщение
Casper-SC, Вот почему у класса test2 тоже есть свойство Х? если я его не создавал...
Создавал. В классе test1. Класс test2 просто унаследовал это свойство. (Считай, в генах ребенка есть гены родителя)
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
08.07.2013, 16:57
Цитата Сообщение от _shtaket Посмотреть сообщение
Как сделать так что бы я свойства мог использовать в других классах с значениям которое я задаю заранее
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
using System;
 
namespace ConsoleApplication1
{
    class Test1
    {
        public Test1()
        {
            X = 90;
        }
 
        public int X { get; set; }
    }
 
    class Test2 : Test1
    {
        public int MethodDyadiBori()
        {
            return X + 20;
        }
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            Test1 t1 = new Test1();
            Console.WriteLine("t1.X += 100 = {0}", t1.X += 100);
            Test2 t2 = new Test2();
            Console.WriteLine("t2.MethodDyadiBori() = {0}", t2.MethodDyadiBori());
 
            Console.ReadKey();
        }
    }
}
Добавлено через 1 минуту
Чуть изменил код
0
6 / 6 / 3
Регистрация: 20.04.2013
Сообщений: 77
08.07.2013, 16:59  [ТС]
Casper-SC, Наверное просьбу я не совсем правильно сформулировал, задавать за ранее я имел виду в Маине
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
08.07.2013, 17:05
Цитата Сообщение от _shtaket Посмотреть сообщение
Casper-SC, Наверное просьбу я не совсем правильно сформулировал, задавать за ранее я имел виду в Маине
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
using System;
 
namespace ConsoleApplication1
{
    class Test1
    {
        public Test1()
        {
            X = 90;
        }
 
        public int X { get; set; }
    }
 
    class Test2 : Test1
    {
        public int MethodDyadiBori()
        {
            return X + 20;
        }
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            Test1 t1 = new Test1();
            t1.X = 100;
            Console.WriteLine("t1.X = {0}", t1.X);
 
            Test2 t2 = new Test2();
            t2.X = 100;
            Console.WriteLine("t2.MethodDyadiBori() = {0}", t2.MethodDyadiBori());
 
            Console.ReadKey();
        }
    }
}
1
6 / 6 / 3
Регистрация: 20.04.2013
Сообщений: 77
08.07.2013, 17:08  [ТС]
Casper-SC, Ну по сути не совсем то что я искал. Все равно вам спасибо
0
 Аватар для Евгений В
912 / 672 / 134
Регистрация: 01.03.2010
Сообщений: 1,279
08.07.2013, 17:32
Цитата Сообщение от _shtaket Посмотреть сообщение
Casper-SC, Ну по сути не совсем то что я искал. Все равно вам спасибо
Может я ошибаюсь, но мне кажется вы не до конца понимаете разницу между классом и объектом, созданном на основе этого класса.

Класс - это макет, шаблон будущего объекта. Класс указывает, какие "руки" и "ноги" будут у будущего объекта.
Как этот объект будет работать.

Проведем аналогию:

Можно создать чертеж трактора. Чертеж №1.
На основании его создадут реальный трактор . Трактор №1.

Далее, взяли Чертеж №1 и добавили в него новые свойства и функции. Получили Чертеж №2.
Теперь можно создавать оба трактора по желанию.
Трактор №1 на основании Чертеж №1 или Трактор №2 на основании Чертеж №2.
(Вот, почему в вашем классе Test2 и соответственно его объекте test2 тоже есть свойство X, унаследованное от класса Test1 )

Можно на основании Чертеж №1 так же создать другой Чертеж №3.
А можно на основании Чертеж №2 создать Чертеж №4
Соответственно и создавать в чем то разные трактора а в чем то и похожие (унаследованные свойства).
1
6 / 6 / 3
Регистрация: 20.04.2013
Сообщений: 77
08.07.2013, 17:55  [ТС]
Евгений В, я вот так и понимаю, просто я подумал что можно как то объекты с одними и теми значениями использовать в других классах(не используя конструктора и присваивания)
0
 Аватар для Евгений В
912 / 672 / 134
Регистрация: 01.03.2010
Сообщений: 1,279
08.07.2013, 18:39
Цитата Сообщение от _shtaket Посмотреть сообщение
подумал что можно как то объекты с одними и теми значениями использовать в других классах
Не очень понял вопрос.
Сформулируйте пример подробнее, на словах. Без кода.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.07.2013, 18:39
Помогаю со студенческими работами здесь

Пути и методы решения некоторых заданий
Уважаемые форумчане, доброго времени суток. К вам с помощью обращается "зеленый" первокурсник. Прошу добрых и отзывчивых людей...

Форма обратной связи, пути решения
Добрый день. Создал форму обратной связи все отлично работает, но не устраивает что когда нажимаешь "отправить" переходит на...

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

Hard disk error - пути решения
Приветствую ! Жил однажды зверь, HP mini 110-3601er. Жил во власти нещадной девицы. Всего 3 года от роду ему, но приключилась такая беда....

Видеокарта люто перекрыла порт PCI. Есть ли пути решения?
При беглом поиске по инету ничего толкового не нашёл. Сидит у меня в голове мысль, взять райзер и согнуть его уголком, но там кусок...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Управление камерой с помощью скрипта 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. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru