Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Непонятно наслед-ие если ссылка на объект от родит 
:(
    Опции темы
Alexanp
Дата 19.4.2016, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 19.4.2016

Репутация: нет
Всего: нет



Пример:
Код

class BaseClass { public int A;}
class DerivedClass : BaseClass {public int B;}


Подскажите чайнику как создается экземпляр класса BC: BaseClass BC = new DerivedClass();
Вопрос: BC - это ссылка на экземпляр класса BaseClass или DerivedClass ?

А этот экземпляр типа DerivedClass состоит из поля A и B. Так ведь ?
Что будет если написать BC=(DerivedClass)BC; ?  После этой операции ведь все равно не доберешься до поля B  (типа BC.B - ошибка) ?
ВС была переменной типа BaseClass. А что стало с этой переменной в результате такой операции ? Или ничего этот код не делает ?

И еще
Можно ли говорить что мы можем управлять экземпляром, созданным по коду
BaseClass BC = new DerivedClass();
с помощью переменной BC ? Т.е. мы обращаемся к полям экземпляра посредством переменной BC.
Но т.к. BC имеет тип BaseClass, то управление экземпляром получается какое-то урезанное. Мы не можем написать BC.B.
Но сделав некое "приведение типа" мы что-то можем. Вопрос: а что это такое "приведение типа" ? Это выражение ? Оно что-то возвращает ?

И еще:
Если поля в базовом классе и в производном имеют одинаковые имена, например

Код

class BaseClass { public int A;}
class DerivedClass : BaseClass {public int A;}
DerivedClass DC = new DerivedClass();


Здесь экземпляр-объект будет иметь два поля с именем A. Так ?
Как через переменную DC добраться до поля A от родительского класса ?

PM MAIL   Вверх
chupachups
Дата 20.4.2016, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 0
Регистрация: 15.10.2008

Репутация: нет
Всего: 1



Нужно хотя бы вопросы нумеровать !

Цитата

   BC - это ссылка на экземпляр класса BaseClass или DerivedClass 
   

DerivedClass, но в представлении класса BaseClass - доступны только члены этого класса.

Цитата

   А этот экземпляр типа DerivedClass состоит из поля A и B. Так ведь ?
   

Внутри памяти - да, внутри кода - нет.

Цитата

   Что будет если написать BC=(DerivedClass)BC; ? 
   

Ничего не будет, переменная не поменяет своего типа.

Цитата

   (типа BC.B - ошибка) ?
   

Да. Чтобы добраться до В надо писать:
(BC as DerivedClass).B; - это и есть  "приведение типа" 

Цитата

   class BaseClass { public int A;}
   class DerivedClass : BaseClass {public int A;}
   DerivedClass DC = new DerivedClass();
   
   Здесь экземпляр-объект будет иметь два поля с именем A. Так ?
   

Да.

Цитата

   Как через переменную DC добраться до поля A от родительского класса ?
   

Проверь код:
Код

DerivedClass DC = new DerivedClass();
BaseClass BC = DC;
DC.A = 3;
BC.A = 5;
System.Diagnostics.Debug.WriteLine($"BC.A = {BC.A}");
System.Diagnostics.Debug.WriteLine($"DC.A = {DC.A}");

Получишь:
BC.A = 5
DC.A = 3


Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0402 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.