[C#] Книжка Троелсена. про интерфейсы написана хрень

6yrop

эта книжка вроде как неоднократно рекомендовалась для изучения C#. По поводу интерфейсов там написана какая-то хрень, стр. 200. Есть классы
 

     public interface IPointy
     {
     byte GetNumberOfPoint;
     }
     public class Hexagon : IPointy
     {
     public byte GetNumberOfPoint
     {
     return 6;
     }
     }
  

В разделе "Получение ссылки на интерфейс"
вот такой код
 

     Hexagon hex = new Hexagon;
     IPointy itfPt = (IPointy)hex;
     Console.WriteLine(itfPt.GetNumberOfPoint;
  

причем дальше идет обсуждение того, что здесь может быть InvalidCastExeption. А нельзя было по проще?
 

     IPointy itfPt = new Hexagon;
     Console.WriteLine(itfPt.GetNumberOfPoint;
  

и эексепшенов бы в рантайме не было бы.

bleyman

Hexagon hex = new Hexagon;
Наверное подразумевается, что в реальной жизни hex будет получаться как параметр функции, причём необязательно его тип поддерживает интерфейс (например, Figure или вообще object).

Dasar

> причем дальше идет обсуждение того, что здесь может быть InvalidCastExeption. А нельзя было по проще?
да, можно проще, но будет другой смысл.
в одном случае - у тебя явное приведение, в другом - не явное.

6yrop

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

public class Cars: IEnumerator, IEnumerable
{
....
public IEnumerator GetEnumerator
{
return (IEnumerator)this;
}
}

как такой каст (IEnumerator)this объясните? по ходу дела, автор чего-то не догоняет.

Dasar

> эта книжка вроде как неоднократно рекомендовалась для изучения C#.
троельсен - хорошая обзорная книжка, поэтому именно ее и рекомендуют для первого прочтения при ознакомление с .net-ом (а не C#, кстати).
накопившиеся вопросы после прочтения троельсена, надо уже задавать (не самой книжке Троельсена а msdn-у, google-у, рихтеру и т.д.

Dasar

> как такой каст (IEnumerator)this объясните? по ходу дела, автор чего-то не догоняет
нормальный каст, единственное ограничение - что внешний код обязан в любой момент времени иметь только один enumerator на один объект этого типа.

bleyman

нормальный каст
Чуве имеет в виду, что он, каст, вообще-то нафиг не нужен.

6yrop

зачем этот какст? скорее всего, ReSharper на такое будет показывать варнинг.

6yrop

вот вот

Dasar

> Чуве имеет в виду, что он, каст, вообще-то нафиг не нужен.
согласен, что не нужен, но это же книжка для новичков, поэтому, вроде бы, и нужно все преобразования делать в коде явно, чтобы было поменьше магии.

Dasar

ты зачем в Троельсена полез?
чтобы понять, что есть в .net-е?
или чтобы поставить себе правильный стиль по написанию .net-кода?

6yrop

дело не в магии, это просто плохой стиль, так не надо программировать, тем более писать в учебнике

6yrop

ты зачем в Троельсена полез?
ну все про нее говорят вот и купил . Была слабая надежда, что по ней будет быстрее, чем через MSDN, освоить некоторые разделы .NET-а, с которыми сам не работал.

Dasar

> освоить некоторые разделы .NET-а
что помешало купить отдельные конкретные книжки по этим некоторым разделам?
жаба задушила?

6yrop

не, экономить на книжках это глупо. Положился на авторитет.

rosali

нужно все преобразования делать в коде явно, чтобы

в тот день когда класс перестанет имплементировать интерфейс получить вместо ошибки компиляции ошибку в рантайме очень умно...

bleyman

Кстати да, об этом я как-то даже и не подумал.

6yrop

хорошо заметил

3uxep

Сорри за оффтоп: Где есть книги по С# в электронном виде? дайте скачать

3uxep

что то незаходит
есть еще у кого?

tashka

да их полно в сетке ищи "c sharp pdf" или "c sharp chm"
Оставить комментарий
Имя или ник:
Комментарий: