Если вы помогли пройти через мое длинное введение, я благодарю вас. Затем я понял, что вокруг было разбросано много терминов, которые, хотя я и узнавал их, не полностью понимал, как они связаны друг с другом иерархическим образом. Что было внутри чего, и что называлось чем, и из этих вещей, зачем они мне все понадобились?

Я большой поклонник Microsoft OneNote и решил записать каждый из этих терминов в формате плана или блок-схемы. По ходу я записал определения каждого из этих терминов, погуглив (и погуглив, и погуглив, и…). Я также использовал различные варианты шрифта, чтобы визуально выделить наиболее важные аспекты каждого определения. Записав все это, я попытался выразить это в нескольких предложениях:

Объект — это экземпляр класса, который содержит методы/функции (возможно, один из многих) , в котором есть строки кода, определяющие поведение и возвращающие результаты. Эти классы имеют поля данных, представляющие ячейки памяти для хранения значения. Все эти элементы содержатся в пространстве имен, что предотвращает их конфликт с другими элементами с тем же именем.

Эти фразы, наконец, начали обретать для меня какой-то смысл. Я также нашел изображение блок-схемы, которая хорошо объяснила это:

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

ПРОСТРАНСТВА ИМЕН — пространство имен представляет собой область. Это контейнер или пробел для вещей с именами. Это способ группировать именованные объекты (предположительно осмысленно), чтобы имена не конфликтовали с другими именованными объектами. Быть вмещающей областью для именованных вещей — основная цель пространства имен. Пространства имен — это просто заборы вокруг именованных вещей, так что вы можете сказать: «Я говорю о Фидо за ЭТИМ забором» или «Я думаю, что то, что мне нужно, находится за ЭТИМ забором».

КЛАССЫ. Класс – этотакже область, которая содержит именованные вещи, но не является ееосновной цель. Класс обычно включает поля данных и методы, определяющие характеристики и поведение. Класс можно расширить, чтобы создать новый класс с дополнительными полями и методами или с методами, которые переопределяют методы базового класса. Определение класса похоже на чертеж, в котором указывается, что может делать тип. Объект/экземпляр — это, по сути, блок памяти, выделенный и настроенный в соответствии с классом (или планом). Программа может создавать множество объектов одного класса. Объектытакже называются экземплярами, и они могут храниться либо в именованной переменной, либо в массиве или коллекции. Клиентский код — это код, который использует эти переменные для вызова методов и доступа к общедоступным свойствам объекта.

МЕТОДЫ/ФУНКЦИИ. Метод/функция в контексте объектно-ориентированного программирования – это процедура, связанная с классом. Как часть класса метод/функция определяет конкретное поведение экземпляра класса. Класс может иметь более одного метода/функции. Метод/функция содержит блок кода, который работает с различными входными данными, многие из которых являются переменными, и дает конкретные результаты, включающие изменения значений переменных или фактические операции на основе входных данных.

По мере того как я продолжал, я обнаружил необходимость определить еще одну группу вещей под заголовком КЛАССЫ:

ЧЛЕНЫ. Члены класса в C# — это члены класса, представляющие данные и поведение класса. Они могут быть любыми из следующих, определения которых я понял с веб-сайта Microsoft здесь:

  • ПОЛЯ ДАННЫХ. Поля данных – это переменные, объявленные в области класса. Поле данных может быть встроенным числовым типом или экземпляром другого класса. Например, класс календарь может иметь поле, содержащее текущую дату. Поле данных — это член класса или объект любого типа, который представляет собой область памяти для хранения значения. Поля данных используются для хранения данных, которые должны быть доступны для нескольких методов класса и доступны в течение всего времени существования объекта. Они позволяют классу инкапсулировать данные с параметрами, чтобы указать их доступность на нескольких уровнях. ИНКАПСУЛЯЦИЯ позволяет рассматривать группу свойств, методов и других элементов как отдельную единицу или объект. Как правило, поле данных используется для определения переменной в классе со специальными возможностями как частной или защищенной. Поле данных, которое должно быть доступно за пределамикласса, может быть инкапсулировано как общедоступный метод, свойство или индексатор. Поле данных также называется переменной уровня класса или переменной-членом. Поля данных также могут быть объявлены как ТОЛЬКО ДЛЯ ЧТЕНИЯ, что предотвращает их изменение. Поля только для чтения могут быть инициализированы во время выполнения, в отличие от const (константных значений). Попытки изменить их позже запрещены.
  • КОНСТАНТЫ — Константы — это поля данныхили свойства, значение которых устанавливается во время компиляции и не может быть изменено. Это фиксированные значения, которые программа не может изменять во время выполнения. Константы могут относиться к любому из основных типов данных, например целая константа, константа с плавающей запятой, символьная константа или строка. буквально.
  • СВОЙСТВА. Свойства – это методы класса, доступ к которым осуществляется так, как если бы они были полями данных этого класса. Свойство может обеспечить защиту поля данных класса, чтобы предотвратить его изменение без ведома объекта. Свойства являются расширением полей данных.
  • СОБЫТИЯ — События уведомляют другие объекты о событиях, таких как нажатие кнопки или успешное выполнение метода. События определяются и запускаются с помощью делегатов.
  • ОПЕРАТОРЫ — элемент программы, применяемый к одному или нескольким операндам в выражении или операторе. Пример: (++) или new. Перегруженные операторы считаются членами класса. Когда вы перегружаете оператор, вы определяете его как общедоступный статический метод в классе, и это позволяет программисту определить несколько методов с одним и тем же именем, если они принимают разные наборы параметров. Определение метода указывает имена и типы любых необходимых параметров. Когда вызывающий код вызывает метод, он предоставляет конкретные значения, называемые аргументами, для каждого параметра.
  • ИНДЕКСЕРЫ. Индексаторы позволяют индексировать объект аналогично массивам.
  • КОНСТРУКТОРЫ. Конструкторы — это методы, которые вызываются при первом создании объекта. Они часто используются для инициализации данных объекта.
  • ВЛОЖЕННЫЕ ТИПЫ — Вложенные типы — это типы, объявленные внутри другого типа. Вложенные типы часто используются для описания объектов, которые используются только типами, которые их содержат.

Чтобы понять, как получить доступ к этим различным членам, я искал и нашел следующие определения:

МОДИФИКАТОРЫ ДОСТУПА и GET; SET; — с помощью различных модификаторов доступа, таких как частный, общедоступный, защищенный, internal и т. д. можно управлятьдоступностью членов класса. Обычно внутри класса мы объявляем поле данныхчастными предоставляем набор общедоступных методовSETиGETдля доступа к поля данных. Поля данных не доступны напрямую вне класса. Мы должны использовать методыsetиgetдля доступа к полям данных. Открытые члены могут быть доступны из любого места за пределами класса, а доступ к закрытым членам ограничен их классом. Модификатор доступаprotected очень похож на privateс одним отличием:к нему можно получить доступ впроизводных классах. Таким образом,защищенный элемент доступен только из производных классов.

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

БАЗОВЫЙ КЛАСС. Базовый класс — это класс, от которого наследуется другой класс. В нем используется ключевое слово виртуальный.

ПРОИЗВОДНЫЙ КЛАСС – производный класс – это класс, созданный на основе базового класса. В нем используется ключевое слово переопределить.

Это понятие известно как полиморфизм. Мне было очень тяжело с этим, но на всех обучающих сайтах он упоминался как один из краеугольных камней C#, поэтому мне действительно нужно было его понять. Наконец, я посмотрел видео на канале YouTube под названием The Coding Train Дэниела Шиффмана под названием 4.7: Introduction to Polymorphism — The Nature of Code и Я начал понимать.

В частности, в Revit очень часто используемый класс, определение которого мне было необходимо понять, — это FilteredElementCollector. Это можно определить так:

FilteredElementCollector — все элементы базы данных Revit объединены в один контейнер. Чтобы получить интересующий элемент, вы фильтруете его, используяколлектор отфильтрованных элементов. КлассFilteredElementCollector используется дляпоиска,фильтрации иитерации по набору элементов.

Хотя все, что делает этот класс, — это помогает вам отфильтровать конкретный объект, который вы хотите изменить, чтобы иметь возможность делать что-либо с моделью Revit, вы должны использовать ТРАНЗАКЦИЮ, которая может быть определил так:

ТРАНЗАКЦИЯконтекст, необходимый для внесения любых изменений в модель Revit. Метод Транзакция сообщает Revit, чтовсе, что вы делаете после запуска транзакции, должно применяться после завершения (фиксации) транзакции. Если вы не внесете изменения в транзакцию, макрос выдаст ошибку, и ваши изменения не вступят в силу.

Другое изображение, которое я нашел, которое переносит изображение блок-схемы выше в мир кода, выглядит следующим образом:

Выше я упоминал об объектах и о том, что при каждом выполнении класса результатом этого выполнения является один объект или экземпляр. В целом этот способ программирования известен как объектно-ориентированное программирование. Это была еще одна из тех вещей, которые мне нужно было понять, и я наткнулся на плейлист из 6 видео на YouTube, а также на канале The Coding Train под названием 8.1: Что такое объектно-ориентированное программирование (ООП)? — Учебник по обработке.

Я хочу закончить каждый из этих постов таким же образом, а именно сказать, что если здесь есть что-то, что я описал неправильно, и я явно не понимаю (или даже частично или немного не понимаю), ПОЖАЛУЙСТА, ДАЙТЕ МНЕ ЗНАТЬ!

Кроме того, вот ссылка на предыдущую публикацию Учимся программировать (и узнаём, как я учусь) в 42 — часть 1.