Обновить

Комментарии 23

Забыты в теме классов первичные(основные) и частичные конструкторы, обязательные поля, расширения классов.

По сути, каждое значение здесь лишь константа целочисленного типа. Но за счет объединения в общее перечисление PlayerColors, мы можем гарантировать, что, например, метод можно будет вызвать только одним из допустимых значений.

    PlayerColors pc = (PlayerColors) 42;
    GameManager.InitPlayer("test", pc);

Да, про это тоже нужно уточнить, спасибо

А ещё добавить к классам и структурам records.

Свойства есть синтаксический сахар, компилятор заменит их get/set методами.

Я помню, когда начинал C# лет 15 назад, как сложно было понять, что такое классы, конструкторы и все вот это. Главная проблема непонимания была в том, что все объяснения были написаны теми, кто уже слишком хорошо всё это знает, и практически все тексты были написаны без понимания, что именно непонятно новичку. Фактически, подавляющее большинство таких текстов написано так, что они излагают понимание автором темы для рецензирования этого понимания другими понимающими, а не для того, чтобы объяснить что-то новое непонимающим. Мне кажется, ваш текст именно такой. К счастью, сейчас есть ChatGPT, который, в отличие от людей, умеет абстрагироваться от уровня своего понимания.

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

Типа - "Грызть зеленое яблоко" - здесь "яблоко" - класс, "грызть" - метод, "зеленое" - свойство.

Для начала этого хватило для декомпозиции, полиморфизм, абстрагирование и наследование уже потом как-то сами пришли.

Неужели это помогло что-то понять? Я помню, что именно так обычно в учебниках рассказывали про классы, и это было совершенно непонятно. Вот я впервые открыл Visual Studio, мигает курсор, и тут мне начинают рассказывать про зеленые яблоки. Мне хотелось крикнуть "Эй, аллё! Вы вообще понимаете, что происходит?")))

Лет 15 назад в вузах был с++, поэтому когда человек начинал c#, предполагалось, что он знает плюсы :-)

Идеального решения тут, к сожалению, нет

Я учил ООП по C++. Поверьте, с C# проще.

Хотя, я понимаю о чём вы, очень часто у авторов бывает когнитивное искажение, называемое "проблема знания", когда знающему кажется, что многие вещи очевидны.

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

А он хотел уметь создавать приложение, чтобы в поле вводишь, кнопочку нажимаешь и оно тебе рассчитает кредитный календарь.

Ну, или просто, ему рассказывают про интерфейс, а он не понимает, зачем ему этот интерфейс, к чему прикладывать?

Именно поэтому у меня бОльшая часть примеров завязана на играх. А так, конечно, хотелось бы слышать отзывы целевой аудитории, чтобы точнее понять слабые места

Респект за варик) И за шарп отдельно, надо двигать в массы такого пирожочка)

в чём смысл называть public int AnotherProperty { get; set; } "свойством" если это буквально по виду тоже самое что и "поле"? просто с явным getter'ом и setter'ом

Не понял вас. Это же все равно свойство со всеми вытекающими, даже если и не имеет логики в get\set или не скрывает их.

хорошо, этот ответ вполне себе достойный, спасибо. скорее я правда не то спрашиваю, мне было трудно понять это разделение на "поля" и "свойства"

Проще говоря, свойства - это синтаксический сахар над приватным полем и методам GetValue и SetValue для него. Самые простые свойства, или автоматические, ничем не отличаются по смыслу от полей, это да. А вот если добавить логику проверки границ в сеттер или вычисления в геттер, тогда, конечно, в них больше смысла.

теперь ясно, спасибо

Поле — это физическое представление, явный способ хранения данных. Свойство — это процедурная оболочка над полем, обеспечивающая определённый доступ к полю. Поля, кстати, может и не быть, а свойство будет.

В модификаторах доступа стоит ещё добавить информацию про комбинации типа protected internal и к чему они могут применяться. Полагаю информацию про partial тоже в этот раздел стоит включить, так как был упомянут модификатор доступа file.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации