Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
 Аватар для Богдан всепытный
10 / 18 / 4
Регистрация: 10.11.2017
Сообщений: 283

Запутался в полиморфизме!

05.07.2018, 20:43. Показов 1155. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть производный класс A, который наследуется от базового класса B.
Полный код
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;
 
namespace ConsoleApp1
{
    class ClassA { /* ... */ }
 
    class ClassB : ClassA { /* ... */ }
 
    class Program
    {
        static void Main()
        {
            ClassB b = new ClassB();
            ClassA a = null;
 
            if (b is ClassA)
            {
                a = (ClassA)b;
            }
            else
            {
                a = null;
            }
            Console.ReadKey();
        }
    }
}
Что делает строчка a = (ClassA)b;??? Помогите!
РАЗЖУЙТЕ!!!
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.07.2018, 20:43
Ответы с готовыми решениями:

Запутался в коде С#
Варіанти завдань Примітка. Зверніть увагу на те, що усі завдання цієї лабораторної роботи повинні бути вирішені без використання...

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

Запутался в классах и инкапсуляции
Всем привет! Нужно переделать программу в ООП-стиль. Заменить структуры на классы, инкапсулировав туда функции в виде методов. Что-то...

7
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
05.07.2018, 20:46
Первая ошибка - класс B здесь наследуется от A ))

C#
1
: ClassA
означает - наследуется от ClassA.
0
 Аватар для Богдан всепытный
10 / 18 / 4
Регистрация: 10.11.2017
Сообщений: 283
05.07.2018, 20:47  [ТС]
amr-now, а вторая?
0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
05.07.2018, 20:53
Лучший ответ Сообщение было отмечено Богдан всепытный как решение

Решение

Описание:
Создать переменную b типа ClassB, в b поместить ссылку на только что созданный конструктором экземпляр класса ClassB.
Создать переменную a типа ClassA, в а поместить null.

Если экземпляр, на который ссылается переменная b, имеет тип или тип-потомок от ClassA,
то в переменную a поместить ссылку на экземпляр, на который ссылается переменная b,
и считать, что у экземпляра тип ClassA.

Иначе в переменную a поместить null.
В конце программы ожидать нажатия любой клавиши.
1
 Аватар для Богдан всепытный
10 / 18 / 4
Регистрация: 10.11.2017
Сообщений: 283
05.07.2018, 21:00  [ТС]
amr-now, но почему-то у меня после выполнения переменная b, равна ClassB. А вы сказали, что будет ClassA!
0
 Аватар для Shogun31337
557 / 534 / 225
Регистрация: 02.11.2016
Сообщений: 1,538
05.07.2018, 21:23
Цитата Сообщение от Богдан всепытный Посмотреть сообщение
А вы сказали, что будет ClassA!
Она и есть типа ClassA. Чтобы убедиться в этом, немного усложним пример:
C#
1
class ClassB : ClassA { public void M() { Console.WriteLine("Test"); } }
Попробуйте из а вызвать метод М. У Вас ничего не выйдет, т.к. в классе ClassA такого метода нет.
0
 Аватар для Богдан всепытный
10 / 18 / 4
Регистрация: 10.11.2017
Сообщений: 283
05.07.2018, 21:27  [ТС]
Shogun31337, да не, я всё понял. Мне сказали, что b будет типа ClassA. Но потом я почитал код и понял, что b ведь, не изменяется при присвоении Извиняюсь.
0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
05.07.2018, 21:59
Если непонятно, какой тип, тогда надо спросить у самой программы:
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
using System;
using System.Reflection;
 
namespace ConsoleApp1
{
    class ClassA { /* ... */ }
 
    class ClassB : ClassA { /* ... */ }
 
    class Program
    {
        static void Main()
        {
            ClassB b = new ClassB();
 
            if (b is ClassA a) // Pattern Matching из C#7
            {
            }
            else
            {
                a = null;
            }
 
            Console.WriteLine("Тип переменной a: " + TypeOfVariable(a).Name);
            Console.WriteLine("Переменная a ссылается на экземпляр класса: " + a.GetType().Name);
 
            Console.ReadKey();
        }
 
        public static Type TypeOfVariable<T>(T variable)
        => typeof(T);
    }
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.07.2018, 21:59
Помогаю со студенческими работами здесь

Дерево treeview, запутался окончательно...
1. Ну так вот мне нужно что бы при нажатии правой клавишей по Nodes выводилась информация, которую мы заполняем с помощью 2-й формы. ...

Запутался с подстановкой, как правильно?
много одинаковых циклов, хотел уменьшить код и вставить подстановку, но не получилось, может подскажите как надо правильно? if...

Запутался с классами, методами, событиями
Добрый день, С# изучаю недавно и нужна помощь, не до конца понимаю классы и работу с ними. Ситуация такая: мне нужно создать datatable и...

запутался со свойствами и передачей параметров полям
Объявить класс, содержащий поле целого типа две константы, задающие допустимый диапазон значения этого поля и свойства для работы с этими...

Запутался в примере, объясните как работает программа
using System; class threeD { int x, y, z; public threeD() { x = y = z = 0; } public threeD(int i, int j, int k)...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru