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

  1. Как мы можем создать массив со значениями, отличными от значений по умолчанию?

Когда вы создаете массив, если вы не присваиваете значение, компилятор присваивает каждому индексу значение по умолчанию в зависимости от типа создаваемого массива. Например, int[] intArray = new int[7]; значение по умолчанию для 7 созданных целых чисел равно 0. Если массив предназначен для ссылочных элементов, то значение по умолчанию устанавливается равным нулю. Способ создания массивов со значениями, отличными от значений по умолчанию, заключается в использовании Enumerable.Repeat:

  • bool[] booleanArray = Enumerable.Repeat(true, 10).ToArray();

// Итак, мы создаем логический массив размером 10 со значениями, установленными в true.

  • int[] intArray = Enumerable.Repeat(100, 5).ToArray();

//Здесь мы создаем массив целых чисел размером 5 и значением 100, присвоенным каждому индексу.

  • string[] stringArray = Enumerable.Repeat("C#", 5).ToArray();

// Массив строк размером 5 и «C#» в качестве значения.

(примеры с riptutorial.com)

2. В чем разница между массивом и массивом-списком?

Массивы и ArrayList имеют одну и ту же важную функцию, заключающуюся в хранении данных, к которым можно получить доступ для самых разных целей. Основное различие между ними заключается в их гибкости с точки зрения того, какие типы данных могут храниться. При использовании массива вы можете хранить только один тип данных. Итак, если вы создали int[], вы не можете хранить в нем строки или символы, и наоборот. Однако, если вы создаете ArrayList, вы можете хранить несколько разных типов данных. Например:

  • Некоторые другие отличия заключаются в том, что размер ArrayLists может динамически увеличиваться или уменьшаться, тогда как массивы не могут — они фиксированы.
  • Массивы строго типизированы, а ArrayLists — нет.
  • Массивы не могут принимать значения NULL, однако ArrayLists могут.
  • Вставка/удаление для массивов выполняется быстрее, чем для ArrayLists.

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

3. Обсудите то, что вы узнали на этой неделе, как будто кто-то только что спросил вас.

Я работаю над пониманием условных выражений, особенно операторов switch. При создании игры «Камень, ножницы, бумага» я впервые использовал оператор switch и понял, что он действительно делает код чище. У меня никогда не было серьезных сомнений по поводу длинных операторов if, else-if, но иногда это может выйти из-под контроля. Я думаю, что за оператором switch проще следить, и, если вам нужно, вы можете вкладывать варианты переключения внутрь случаев переключения, как это было продемонстрировано в игре RPS.

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

Что касается внешней темы, я стимулировал свое понимание мужества. Недавно я прочитал письмо, написанное доктором Мартином Лютером Кингом-младшим нескольким священнослужителям, которые поставили под сомнение законность его подхода «прямого действия» и нарушение действующих законов. В своем ответе на их критику д-р Кинг предположил, что морально подчиняться справедливым законам и не подчиняться несправедливым законам. Он даже предположил из сочинений Фомы Аквинского, что несправедливый закон не является законом. Его аргумент в пользу того, что справедливо было, заключается в том, что оно соответствует моральному закону Бога — вечному закону — и естественному закону. В частности, если это способствует развитию личности, то это хорошо, а если оно разрушает личность, то это зло и несправедливость, и поэтому требуются ненасильственные прямые действия, чтобы создать драматическое напряжение, которое заставит угнетателей увидеть несправедливость и сесть за стол. переговоров.

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

4. Перечислить и объяснить возможности C#?

  • Объектно-ориентированный

//Есть четыре основных элемента объектно-ориентированного программирования:

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

— Абстракция: это концепция/практика создания объектов, которые можно вызывать и использовать, не зная внутренней логики. Хорошим примером этого является телефон. Вы должны знать, как использовать кнопки и работать с интерфейсом, но вам не нужно знать сложные коды, происходящие в фоновом режиме.

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

— Полиморфизм: Полиморфизм, как следует из названия, — это концепция многих форм. На языке программистов это означает, что «доступ к объектам разных типов возможен через один и тот же интерфейс» (stackify.com). Примером этого, предоставленным Microsoft, является класс Shape с методом draw(). Различные типы фигур, производных от класса Shape, — это Circle, Rectangle и Triangle (это лишь некоторые из них). В каждом производном типе они могут вызывать метод draw(), однако внутри их метода public override void draw() находится уникальный код, сообщающий программе, как рисовать конкретную фигуру.

Это похоже на перегрузку методов, которая является формой полиморфизма, известной как статический полиморфизм. Приведенный выше пример фигур является примером динамического полиморфизма. Интересно отметить, что в C# каждый тип полиморфен. Неважно, был ли тип определен пользователем, он все равно полиморфен, поскольку все типы наследуются от класса Object.

  • Введите сейф

//C# — это типобезопасный язык, что означает, что он не будет выполнять программу, синтаксис которой не соответствует строгим, заранее определенным правилам. Почему? Предотвратить доступ объекта одного типа к ячейке памяти другого типа. Почему это важно? Это важно, потому что если объект может получить доступ к пространству памяти другого объекта, то потенциально кто-то может изменить значения, что приведет к нарушению безопасности.

Вот сравнение и противопоставление безопасности типов: В Ruby вы можете объявить переменную просто как x = 3 или так же легко объявить x = «три». Однако в C# вы должны объявить тип переменной, например, int x = 3; или строка x = «три»; чтобы объявление переменной было принято. Если вы не соответствуете своему коду этим стандартам, программа даже не попытается запуститься. Ruby, однако, попытается запуститься, а затем, если у вас есть ошибка в коде, он выдаст исключение. Поскольку существуют разные уровни безопасности типов, это не обязательно означает, что Ruby полностью небезопасен по типам; однако это пример того, насколько C# является типобезопасным.

  • Совместимость

//Интероперабельность в C# — это функция, позволяющая использовать неуправляемый код. Весь код, находящийся под управлением CLR, является управляемым, а все, что находится за пределами CLR, неуправляемо, включая COM, COM+, C++, ActiveX и Microsoft Windows API. Таким образом, с помощью .NET Framework вы можете использовать этот код, не ставя под угрозу свою программу и не отказываясь от других преимуществ C#.

  • Богатая библиотека

//C# Sharp имеет обширную библиотеку, созданную на основе .NET Framework. .NET обеспечивает реализацию «классов, интерфейсов, делегатов и типов значений» (docs.microsoft.com). Соглашение об именах для доступа к библиотеке основано на точечной схеме синтаксиса, показывающей иерархию. У вас есть пространство имен, за которым следует тип (например, System.Collections.Generic.List‹T›). При создании программы в сообществе Visual Studio вы можете заметить вверху строки кода с указанием «использование системы» и т. д. Эти объявления помечают доступные методы, типы, классы и т. д. из этих пространств имен.

То, что было перечислено и обсуждено, не является исчерпывающим списком возможностей C#. Несколько других, заслуживающих упоминания, — это высокая скорость компиляции, возможность обновления и масштабируемости, а также компонентно-ориентированный характер.

5. Какие IDE предоставляет Microsoft для разработки на C#? Какой вы используете?

IDE — это интегрированная среда разработки, которая предоставляет разработчикам интерфейс, с помощью которого они могут писать, отлаживать и организовывать код, а также иметь доступ к широкому набору инструментов, таких как intellisense. Visual Studio — это линейка IDE от Microsoft. Для С# я использую Visual Studio Community. При работе с HTML, CSS и Javscript я использовал редактор кода Microsoft под названием Visual Studio Code.

6. Объясните типы комментариев в C#? Введите их также со встроенными блоками кода.

C# имеет три типа комментариев — многострочные, однострочные и xml. Ниже приведены примеры всех трех.

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

7. Объясните пространства имен в С#? Как и почему мы его используем?

Пространства имен похожи на контейнеры. Они используются для разделения и организации кода в больших проектах, чтобы избежать конфликтов имен. Например, допустим, вам нужно создать метод multiplication() для одного объекта, но также необходимо создать совершенно другой метод multiplication() для другого объекта. Вместо того, чтобы называть их умножением1() и умножением2() и помнить, какое из них относится к какому объекту, вы можете назвать оба как умножение() и просто разделить их, соответственно, по тому пространству имен, в котором они находятся. Таким образом, у вас может быть пространство имен KittyKats, под которым находится один метод, и пространство имен Bunnies, под которым находится другой метод. Теперь в зависимости от того, к какому пространству имен вы обращаетесь, компилятор знает, какой метод запускать. Таким образом, пространства имен — это способ организации кода в сегменты или блоки всего проекта, что в конечном итоге облегчает жизнь разработчикам.

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