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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поясните неявное приведение 
:(
    Опции темы
nvb
Дата 27.9.2012, 09:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

Код

public class A
{
  public int a;
  public virtual void  ToStr(){Console.WriteLine("Base "+a);}
  public A(int a){this.a=a;}
}
public class B:A
{
    public int b;
    public override void  ToStr(){Console.WriteLine("Derived "+a+" "+b);}
    public B(int a,int b):base(a){this.b=b;}
}
 
class Entry
{
    public static void  Main()
    {
        A a=new A(5);
        B b = new B(10,10);
        a=b;
 
    }
}

 
1. Что происходит с данными класса-наследника при таком приведении? Насколько я помню в С происходило усечение класса,т.е. данные уникальных полей наследника терялись. в С# такое приведение является безопасным...т.е. данные сохраняются каким то образом и к ним можно обратиться?
И почему, собственно, обратное приведение небезопасно, тут-то данные точно не потеряются?
понимаю, вопрос туп, но что-то никак не сдвинусь.
Спасибо.
PM MAIL   Вверх
Экскалупатор
Дата 27.9.2012, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

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



Цитата(nvb @  27.9.2012,  08:12 Найти цитируемый пост)
С# такое приведение является безопасным...т.е. данные сохраняются каким то образом и к ним можно обратиться?

нужно явно привести к требуемому типу и тогда можно будет использовать эти поля.
Цитата(nvb @  27.9.2012,  08:12 Найти цитируемый пост)
И почему, собственно, обратное приведение небезопасно, тут-то данные точно не потеряются?

потому что тебе ничто не мешает создать объект базового типа и попытаться его привести к типу наследника и в итоге получить ошибку.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

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


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

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


 




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


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

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