Методы расширения

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

Читать далее

Лабораторная работа по C#. Создание и реализация класса «Матрица MxN»

Задача: Создать класс «Матрица MxN». Реализовать инициализацию элементов матрицы случайными числами, вывод транспонированной матрицы, нахождение среднего арифметического всех элементов, а также вывод информации об объекте.

Читать далее

Разделяемые классы и методы в C# (ключевое слово partial)

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

Читать далее

Лабораторная работа по C#. Классы

Задача: создайте отдельный класс, соответствующий классу объектов из вашей предметной области (необходимо задать не менее 5 свойств для создаваемого класса). Добавьте метод для вывода описания объекта класса, используя метод ToString(). Этот метод должен в удобном для читателя виде перечислять все заданные значения свойств объекта класса.

Читать далее

Классы и объекты C#: класс System.Object

Абсолютно все классы в .NET и C#, в частности, включая и те, которые мы создаем самостоятельно, а равно и базовые типы данных, такие как System.Int32, System.Double и так далее, неявно являются наследниками класса Object. В любом случае, даже если при создании своего класса мы не указываем класс Object в качестве родительского, то неявно по умолчанию класс Object стоит на вершине иерархии наследования. Исходя из этого, все типы данных и классы могут реализовать методы, определенные в классе System.Object.  Рассмотрим методы класса Object более подробно.

Читать далее

Классы и объекты C#: сокрытие методов и свойств

На данные момент нам известно как в C# работает перегрузка (overload) и переопределение (override) методов и свойств классов. Однако, на этом возможности C# по изменению функциональности базовых свойств и методов в классах не ограничиваются.  Также, одним из способов изменить функциональность метода или свойства, унаследованного от базового класса, является сокрытие (hiding или shadowing). И сегодня мы будем рассматривать именно этот вопрос — сокрытие методов и свойств классов в C#.

Читать далее

Классы и объекты C#: виртуальные методы и свойства

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

Читать далее

Классы и объекты C#: перегрузка операторов и операций преобразования типов

О перегрузке методов мы уже знаем. Вместе с этим, в C# можно перегружать не только методы и свойства, но и операторы, например, операторы сложения и вычитания, сравнения и так далее. Более того, мы можем сделать перегрузку операций преобразования типов. И сегодня мы рассмотрим некоторые практические примеры, когда нам может пригодиться такая возможность языка программирования C# как перегрузка операторов и операций преобразования типов.

Читать далее

Классы и объекты C#: преобразование типов, ключевые слова as и is

На данный момент мы знаем как в C# работает наследование, как создавать потомков класса и их использовать в свих приложениях. Однако, при использовании механизмов наследования в C# (и не только) достаточно часто возникает необходимость преобразования типов объектов или же определить какой тип фактически использовался при создании какого-либо объекта в иерархии. С такой потребностью мы могли столкнуться, например, в теме про полиморфизм. До сих пор мы имели представление о преобразовании базовых типов данных. В этой части мы разберемся с тем как можно производить преобразования пользовательских типов данных.

Читать далее

Классы и объекты C#: индексаторы

Индексаторы в C# позволяют индексировать объекты и обращаться к данным по индексу точно также, как в массивах. По своей форме индексатор похож на свойство со стандартными блоками get и set, которые возвращают и присваивают значение. Сегодня разберемся с тем, как используются индексаторы в C#.

Читать далее