Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/21: Рейтинг темы: голосов - 21, средняя оценка - 4.67
8 / 9 / 4
Регистрация: 30.11.2016
Сообщений: 108
1

Наследование и вызов метода

22.04.2018, 16:42. Показов 4002. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
есть базовый класс и класс потомок.
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
class a
{
protected int a;
protected int b;
public a()
{
a=0; b = 0;
}
public virtual void show()
{
//chto-to tut est
}
}
class b:a
{
int x,y;
public b()
{
x=0; y = 0;
}
public override show()
{
base.show();
//chto-to tut est;
}
public void test(){//chto-to tut est}
}
class Program
    {
        static void Main(string[] args)
        {
            a test = new a();
            test = new b();
            test.Show();
            //как здесь вызвать метод тест из класса б
 
        }
    }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.04.2018, 16:42
Ответы с готовыми решениями:

Полиморфизм: вызов метода базового класса, переопределенного метода и нового метода
В базовом классе метод помечен как virtual. Насколько я понял из книги: override означает, что...

Вызов методов классов друг у друга (вызов метода из другого класса)
Есть несколько классов, которые могут вызывать методы (функции) друг у друга. Логика: класс1 имеет...

Вызов переменной метода A из метода В
Добрый день. Подскажите как происходит вызов Например даны два класс А и В, в каждом классе есть...

Наследование метода
Приветствую, формучане. Вообщем, имеется класс. Class A { protected first_method () ...

6
29 / 31 / 27
Регистрация: 15.11.2017
Сообщений: 121
22.04.2018, 17:02 2
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 Program
{
  class A
  {
    public virtual void Show()
      => Console.WriteLine("A Show()");
  }
 
  sealed class B : A
  {
    public override void Show() 
      => base.Show();
 
    public void Test()
      => Console.WriteLine("B Test()");
  }
 
  sealed class MainClass
  {
    static void Main()
    {
      var b = new B();
 
      b.Test();
 
      Console.ReadKey();
    }
  }
}
0
8 / 9 / 4
Регистрация: 30.11.2016
Сообщений: 108
22.04.2018, 17:20  [ТС] 3
VIAZNIKOVGM Это не совсем то что нужно
0
29 / 31 / 27
Регистрация: 15.11.2017
Сообщений: 121
22.04.2018, 17:31 4
Dragon3005,
C#
1
2
3
4
5
6
7
var a = new A();
a = new B();
 
if (a as B != null)
{
  ((B) a).Test();
}
1
263 / 224 / 108
Регистрация: 09.12.2015
Сообщений: 652
22.04.2018, 17:32 5
Dragon3005, вы хотите вызвать метод дочернего класса через ссылку на родительский класс?
Напрямую это невозможно.
Но если исхитриться, то можно через безопасный даункаст:
C#
1
2
3
4
5
         A test = new A();
         test = new B();
         test.Show();
         //как здесь вызвать метод тест из класса б
         (test as B)?.test();
А вообще, как только в программе появляются даункасты, это признак плохой архитектуры.
1
8 / 9 / 4
Регистрация: 30.11.2016
Сообщений: 108
22.04.2018, 18:28  [ТС] 6
Fleder, а как тогда? Не каждый же метод писать в базовом классе(пустой)
0
263 / 224 / 108
Регистрация: 09.12.2015
Сообщений: 652
22.04.2018, 18:44 7
Цитата Сообщение от Dragon3005 Посмотреть сообщение
а как тогда? Не каждый же метод писать в базовом классе(пустой)
Я не знаю вашей архитектуры или того, что вы хотите запрограммировать.
Но моё личное мнение - базовые классы надо применять только при использовании генерализации.

То есть, создаём множество классов, которые удовлетворяют наши потребности.
Каждый класс - сам по себе и ни от кого не наследуется.
Чтобы их можно было единообразно обрабатывать - реализуем ими какие-нибудь интерфейсы.

И вот мы замечаем, что некоторые наши классы содержат одинаковый код - выносим его в абстрактный базовый класс,
то есть выносим единообразие в отдельную сущность (генерализируем).
Но никак не наоборот: сначала наплодим кучу базовых, а потом голову ломаем, как от них наследоваться...
0
22.04.2018, 18:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.04.2018, 18:44
Помогаю со студенческими работами здесь

Запрет на наследование метода
Всем привет. Помогите, кто знает. Нужно сделать так. 1. Создать класс А, в котором все методы...

Запрет наследование абстрактного метода
Абстрактный класс ValueType наследует от Object-a Только 3 метода, или наследует все но видны 3...

Наследование и upcast параметров метода
class A { public virtual void M(int a) { ...

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


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

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