Оффтопик. Изучаем C#

Автор Тема: Оффтопик. Изучаем C#  (Прочитано 52286 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 467
  • Карма: 62
Re: Изучаем C#
« Ответ #45 : 30-08-2015, 11:08:03 »
То, как в C# реализованы методы расширения и LINQ, работающий на основе этого механизма, меня вполне устраивает.
Если-б не было c# - то наверное и vb многих  устроил - это смотря с чем сравнивать.
Но у них есть свои плюсы и основной из них - скорость работы.
Этот аргумент лет 20 как потерял актуальность - к c# он точно не имеет никакого отношения (я думаю во всех Ваших кодах последних 5 лет не найдется, к примеру, ни одной итерации по индексу - а ведь так быстрей - а везде будет минимум foreach или вообще linq вызов, более того если Вы такое увидите - то первый предложите "бить линейкой по рукам" и это и с моей точки зрения правильно и подобных примеров в Ваших-же кодах - немерено).
Все выложенные коды на с#, потихоньку все более и более имеют функциональный стиль (Microsoft старается) - авторы в большинстве случаев этого сами не понимают, более того часто воспринимают это в штыки (видимо от слабого владения предметом - многие считают что функциональщина - это что-то медленное и неуклюжее).
Синтаксическая база С разработана и прекрасно работает - как своего рода продвинутый ассемблер Фон Нейманевской архитектуры - это факт подтвержденный сотнями практически совместимых между собой компиляторов различных архитектур и платформ (естественно не на уровне вызовов API - а на уровне как раз их создания). Но эта архитектура совсем не обладает гибкостью - linq - сделан не плохо - но по факту эта независимая отдельная надстройка у которой нет взаимодействия с самим языком (основным синтаксисом - пришлось по сути свой дополнительный вводить) - не так-ли? Получается смесь нарванных кусков из разных парадигм которые не свести к одному - нету целостности. Дело не в том, что там чего-то еще нет, хотя я думаю что когда в c# появятся активные шаблоны и провайдеры типов - Вы первый кто не будет представлять как Вы до этого без них писали. Дело в том, что пора понять что хлам надо выкидывать - он вроде и не мешает - но пыль с него протирать нужно, да и место занимает. Т.к., повторюсь, уже почти все пишут функциональщину и не замечают - но из-за поддержки всей остальной парадигмы не могут воспользоваться в "полную силу" - например тип "String" с самого начала .Net - функциональный - никто не задумывался, что это так - нет ни одной перегрузки метода по замене строки - везде порождает новую - и ничего никто по этому поводу не плачет, а ведь произвести оптимизацию на уровне компилятора на предмет можно-ли не "рожать" новую, а заменить старую - можно только в функциональном языке (или в глухо отведенной функциональной части - типа linq) - что произойдет с ней дальше в императивном языке компилятору не понятно (чтоб понять там надо такую логику включать - по сравнении которой все шахматные программы - детский лепет). Про параллельные вычисления я вообще промолчу.
Я все это к тому - хотим мы или нет с# в итоге все равно сильно "переродиться" и будет уже совсем не похож на нынешней (уже не похож). Тогда может и я начну на нем писать не плюясь.

Оффлайн Пашин Евгений

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Re: Изучаем C#
« Ответ #46 : 31-08-2015, 09:48:11 »
А что, этот текст был чем-то не понятным?

К сожалению, не совсем, поскольку в следующем пункте шла речь о типах: классах, интерфейсах, делегатах, структурах, перечислениях.

Пространство имен System.Reflection содержит типы, предназначенные для извлечения сведений о сборках, модулях, членах, параметрах и других объектах в управляемом коде путем обработки их метаданных.

Когда попытался понять, что такое типы в System.Reflection оказался в ступоре, поскольку как я понял, это тоже классы, но каждый из них выполняет свои функции.

Даже такая простая (для Вас) фраза: В структурах CustomAttributeNamedArgument представляет именованный аргумент настраиваемого атрибута в контексте, предназначенном только для отражения. меня слегка "пригвоздила". Да, я не понял этой фразы, увы, но я не сдаюсь. Мне пока проще мыслить другими категориями: девушками, футбольными полями, машинами и т.д. Для начала найду, что означает отражение.

Я рад за Вас, Андрей, что Вам это все понятно и легко дается. Вам нужно лишь понять одно, что разные люди обладают разным понимаем одного и того же явления и события. Я скорее и проще изучу язык программирования, используя образные (на птичках, людях, машинах и т.д.) выражения, чем конкретное определение, взятое из интернета. Читать я умею, поверьте, а вот понимание хромает.

Спасибо за Рихтера! Скачал, попробую хотя бы по несколько страниц прочитывать-ИЗУЧАТЬ в день! ИЗУЧАТЬ, а не просто читать. Прогресс будет 100%.

По поводу полей попробую пересказать, что Вы имели ввиду:

Как я понял, в старом и добром VB6, создание классов и свойств класса тоже происходило с помощью полей и свойств:

Вот пример:

Код - Visual Basic [Выбрать]
  1. Private mvarРадиус As Single ' Это поле
  2.  
  3. Public Property Let Радиус(ByVal vData As Single) ' Это получение свойства
  4.    mvarРадиус = vData
  5. End Property
  6.  
  7. Public Property Get Радиус() As Single ' Это установка значения свойства
  8.    Радиус = mvarРадиус
  9. End Property

Когда я присмотрелся, я понял, что при использовании класса я не видел в списке свойств переменной mvarРадиус, но этот параметр успешно играл свою роль в работе класса (точнее свойства Радиус) и он тоже хранит в себе значение, все время, пока класс существует!

За поле, объявленное с модификатором доступа public нужно бить линейкой по рукам.

Грубо... получение ошибок - это тоже процесс обучения.

Зато становится понятным для чего нужно поле держать приватным Private mvarРадиус As Single.
Однако, я решил попробовать сделать подобное в Visual Basic 2013 и вот что у меня получилось:
Код - vb.net [Выбрать]
  1. Public Class Class1
  2.     Private _color As Boolean
  3.     Public Property Color As Boolean
  4.         Get
  5.             Color = Me._color
  6.         End Get
  7.         Set(value As Boolean)
  8.             _color = value
  9.             ' Здесь вставляется событие или процедура (а можно просто вызвать процедуру)
  10.         End Set
  11.     End Property
  12.  
  13.     Public Sub AnyThing()
  14.         Dim FLD As New Class1
  15.         FLD.Color = True ' Что же это получается, что я и поле могу использовать и свойство?
  16.         FLD._color = True ' Что же это получается, что я и поле могу использовать и свойство? Почему поле отображается, если оно PRIVATE
  17.     End Sub
  18.  
  19. End Class
  20.  

И поле и свойство - видимые! Что меня лично смущает.

Я что-то не понимаю, где моя ошибка?

Вроде сделал скрытым поле, а оно видимое... Напрашиваются вопросы:
1. Андрей линейкой будет махать?
 или
2. Андрей включит своего мудрого учителя и поможет понять в чем проблема?

Кроме того, свойства позволяют инкапсулировать логику контроля доступа к полям и, в случае необходимости, править её, без необходимости править сторонний код, использующий эти свойства.
Будьте человеком (вернее спуститесь с небес к людям) и объясните эту фразу как-нибудь проще... Можно на птичках, цветочках или т.п.?

Думаю, что целесообразней тебе было бы изучать c# по Троелсену, а не по справочнику Шильдта.
Учту!

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 10562
  • Карма: 1341
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Изучаем C#
« Ответ #47 : 31-08-2015, 10:07:41 »
Скачал, попробую хотя бы по несколько страниц прочитывать-ИЗУЧАТЬ в день!
А я бы посоветовал сначала один раз прочитать всю книгу, не сильно вдаваясь в детали. Причина очень простая - во введении и первых главах даются общие понятия без детализации. А их объяснение даётся в следующих главах. Количество вопросов сразу уменьшится.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 10562
  • Карма: 1341
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Изучаем C#
« Ответ #48 : 31-08-2015, 10:09:23 »
FLD._color = True ' Что же это получается, что я и поле могу использовать и свойство? Почему поле отображается, если оно PRIVATE
Внутри класса оно доступно, но недоступно вне его.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Пашин Евгений

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Re: Изучаем C#
« Ответ #49 : 31-08-2015, 10:29:50 »
Внутри класса оно доступно, но недоступно вне его.

Ok! Понял. Проверил и убедился )))




Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 162
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Изучаем C#
« Ответ #50 : 31-08-2015, 10:58:26 »
Напрашиваются вопросы:
1. Андрей линейкой будет махать?
 или
2. Андрей включит своего мудрого учителя и поможет понять в чем проблема?
Ты уж определись: либо ты обиженный, предельно вежливый интеллигент, либо ты поясничаешь (тогда нехрен обижаться) не понятно чего добиваясь.

Если что, то я могу игнорировать твои вопросы, даже читать их не буду - мне это не сложно. Возможно в этом случае твоя жизнь на форуме станет более весёлой. Тебе в любом случае ответит А.Н. Ривилис (ему придётся, не зависимо от того хочет он этого или нет ибо это его работа), так что от отсутствия моих сообщений ты ничего не потеряешь.

Если в моём коде обнаруживается какая-то ошибка или некая глупость - я не обижаюсь, когда мне пишут, что я написал хрень. Если я смотрю в книгу и вижу фигу, то я не обижаюсь, если меня ткнут носом в то, что я пропустил. Мне не важно, в какой форме мне указывают на мои ошибки: в "вежливой", или "военной" - главное, чтобы замечание было по существу. Я не устраиваю размазывание соплей на пару десятков постов и тебе впредь не советую этого делать - сильно раздражает окружающих (и не только меня, поверь).

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 162
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Изучаем C#
« Ответ #51 : 31-08-2015, 11:00:15 »
Внутри класса оно доступно, но недоступно вне его.
Я очень сомневаюсь, что в букваре об этом не пишут...

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 162
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Изучаем C#
« Ответ #52 : 31-08-2015, 11:18:55 »
Цитировать
Кроме того, свойства позволяют инкапсулировать логику контроля доступа к полям и, в случае необходимости, править её, без необходимости править сторонний код, использующий эти свойства.
Будьте человеком (вернее спуститесь с небес к людям) и объясните эту фразу как-нибудь проще... Можно на птичках, цветочках или т.п.?
В редакторе сообщений есть специальная кнопка с тегом цитаты. Используй её вместо того, чтобы делать шрифт "жирным", дабы всем было понятно, что это именно цитата.

 Поясню на примере интерфейсов... В C# ты уже наверняка читал об интерфейсах. Так вот классы, реализующие эти интерфейсы инкапсулируют в себе логику работы (изложенную посредством программного кода), т.е. содержат конкретный код одного из возможных вариантов реализации этого интерфейса. Другой класс, реализующий этот же интерфейс, может инкапсулировать в себе совершенно иную логику работы.

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

Разжёванный материал находится в книге, п.17 указанной мною здесь.

Цитировать
Будьте человеком (вернее спуститесь с небес к людям)
В контексте твоего вопроса это паясничанье идёт тебе не не пользу...

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 10562
  • Карма: 1341
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Изучаем C#
« Ответ #53 : 31-08-2015, 11:51:20 »
Тебе в любом случае ответит А.Н. Ривилис (ему придётся, не зависимо от того хочет он этого или нет ибо это его работа), так что от отсутствия моих сообщений ты ничего не потеряешь.
Уточняю. Я отвечу в любом случае, если вопрос будет связан с AutoCAD API. Но отвечать на вопросы по основам языков программирования я не обязан. И в большинстве случаев буду указывать, что нужно пользоваться поиском.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Пашин Евгений

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Re: Изучаем C#
« Ответ #54 : 31-08-2015, 12:09:08 »
После прочитанного уже и не хочется никакого C#.

В C# ты уже наверняка читал об интерфейсах.

Читал, но не понял! Интерфейсами Вы называете то, что просто является кодом? Тогда Вы меня еще больше запутали.

В контексте твоего вопроса это паясничанье идёт тебе не не пользу...
У меня правда сложилось впечатление, как будто Вы какой-то царь, а я какой-то холоп. Вот я и подумал, что надо Вам об этом как-то сказать и как можно мягче. У меня похоже не получилось.

Если ты в коде выполняешь взаимодействие на уровне интерфейсов (вместо использования конкретных классов напрямую), то ты можешь прозрачно для программы подменять один класс, реализующий этот интерфейс, другим классом.

Ну и что это значит?


Странно, цитаты сработали на Александра Ривилиса...

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 10562
  • Карма: 1341
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Изучаем C#
« Ответ #55 : 31-08-2015, 12:14:19 »
1. Обрати внимание, что всё что ты процитировал написал не я, а Андрей Бушман. Т.е. кнопку "цитировать выделенное" ты нажимал не там где нужно.
2. Ты снова начинаешь задавать вопросы, не прочитав книгу. Дальше я буду отвечать на вопросы по C# только тогда, когда пойму, что ты уже её прочитал.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 162
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Изучаем C#
« Ответ #56 : 31-08-2015, 12:17:15 »
Цитировать
Читал, но не понял! Интерфейсами Вы называете то, что просто является кодом?
...
Ну и что это значит?
Я вижу, что книг ты не читаешь, зато продолжаешь нести какую-то чушь (царь\холоп) и размазывать сопли. Всё, я умываю руки, далее без меня.

Оффлайн Пашин Евгений

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Re: Изучаем C#
« Ответ #57 : 31-08-2015, 12:17:38 »
Т.е. кнопку "цитировать выделенное" ты нажимал не там где нужно.

Приношу свои извинения.

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2186
  • Карма: 588
  • LISP/C#, AutoCAD/Civil 3D
  • Skype: zagor_dmtr
Re: Изучаем C#
« Ответ #58 : 01-09-2015, 00:43:08 »
Я вспоминаю как я относительно недавно (года 2 тому назад) начинал изучать C#. Он и правда не очень прост в изучении, если раньше вообще с ООП не имел дела. Книги написаны теми, кто уже его знает, для кого все понятия уже очевидны. Поэтому, по книгам мне лично было очень тяжело изучать. Я читал и перечитывал отдельные главы по нескольку раз и абсолютно ничего не мог понять. Интерфейсы, поля, свойства, индексаторы, абстрактные классы, виртуальные методы, статические и нестатические классы - голова от этого только болела :). Даже с примерами понятнее не становилось. При этом, я уже довольно сносно на тот момент писал на LISP. И поначалу я на C#  писал LISP-подобные программы с одним командным классом и с одним длиннющим методом в нем :) А понимание пришло с опытом. Постепенно, с каждым новым кодом узнавал и понимал что-то новое. Потом, уже с небольшим багажом опыта снова начинал читать книги, понимал уже гораздо больше. Кое-что просто запоминал "как есть", не понимая, а понимание приходило позже, когда разбирал чей-то чужой код с нужным мне методом или классом...
В общем, пройдя уже через это, я понимаю, что гораздо легче и продуктивнее было бы, если бы я пошел на какие-то курсы по программированию. Они как раз ориентированны на начинающих. Если есть такая возможность - не пренебрегайте ею. Ну или по тому же пути, что шел я - методом проб и ошибок. Но так дольше и будет много пробелов в базовых знаниях, которые долго придется самому закрывать. А терроризировать кого-то из опытных, просить разъяснить - это пустая трата времени. В большинстве случаев, разъяснение будет на том же профессиональном языке, на котором книга написана. Мало кто готов тратить свое время (бесплатно) на подробное и обстоятельное разжевывание базовых понятий.

Оффлайн Пашин Евгений

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Re: Изучаем C#
« Ответ #59 : 01-09-2015, 06:50:06 »
Я читал и перечитывал отдельные главы по нескольку раз и абсолютно ничего не мог понять.

Как я Вас понимаю. Пока так и есть.

Мало кто готов тратить свое время (бесплатно) на подробное и обстоятельное разжевывание базовых понятий.

От этого меня и коробит, что своими вопросами я кого-то отвлекаю от важных дел (как если бы меня отвлекали, когда дел невпроворот). Я все это прекрасно понимаю. Поэтому постараюсь вообще не задавать вопросов, если не готов к ответам. Теперь буду разбираться в примерах - это пока единственный путь для меня, чем я и занимаюсь уже.