Gray Hat C#

#2 Gray Hat C#. Руководство для хакера по созданию и автоматизации инструментов безопасности. Знакомство с классами и интерфейсами.

Здравствуйте, дорогие друзья.

Классы и интерфейсы используются для создания сложных структур данных, которые было бы сложно представить с помощью только встроенных структур. Классы и интерфейсы могут иметь свойства, которые представляют собой переменные, которые получают или устанавливают значения для класса или интерфейса, и методы, которые подобны функциям, выполняемые в классе (или подклассах) или интерфейсе, и являются уникальными для него. Свойства и методы используются для представления данных об объекте. Например, классу Firefighter может потребоваться свойство int, которое сообщает пожарному, что нужно поехать в место, где произошел пожар.


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


Создание класса

Мы создадим простой класс, показанный в листинге 1-3, в качестве примера, который представляет структуру данных государственного служащего для человека, который каждый день работает, чтобы сделать нашу жизнь проще и лучше.

Listing 1-3: The PublicServant abstract class

Класс PublicServant — это особый тип класса. Это абстрактный класс [1]. Как правило, Вы можете просто создать класс, как и любой другой тип переменной, и он будет называться экземпляром или объектом. Однако абстрактные классы не могут быть созданы, как другие классы; они могут быть унаследованы только посредством создания подклассов. Существует много типов государственных служащих: сразу на ум приходят пожарные и полицейские. Поэтому имело бы смысл иметь базовый класс, от которого наследуются эти два типа государственных служащих. В этом случае, если бы эти два класса были подклассами PublicServant, они унаследовали бы свойство PensionAmount [2] и делегат DriveToPlaceOfInterest [3], которые должны быть реализованы подклассами PublicServant. Не существует общей должности «государственного служащего», на которую кто-то мог бы претендовать, поэтому нет смысла создавать только экземпляр PublicServant.


Создание интерфейса

Дополнением к классам в C# являются интерфейсы. Интерфейсы позволяют программисту заставить класс реализовать определенные свойства или методы, которые не наследуются. Давайте для начала создадим простой интерфейс, как показано в листинге 1-4. Этот интерфейс называется IPerson и объявляет несколько свойств, которые обычно есть у людей.

Listing 1-4: The IPerson interface

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


Если бы класс реализовал интерфейс IPerson [1], этому классу пришлось бы самостоятельно реализовать свойства Name [2] и Age [3]. В противном случае он не скомпилируется. Я покажу, что именно это означает, когда мы в следующий раз реализуем класс Firefighter, реализующий интерфейс IPerson.
Теперь просто знайте, что интерфейсы — это важная и полезная функция C#. Программисты, знакомые с интерфейсами Java, будут чувствовать себя с ними как дома. Программисты на C могут думать о них как о заголовочных файлах с объявлениями функций, которые ожидают, что файл .c реализует эту функцию. Тем, кто знаком с Perl, Ruby или Python, интерфейсы могут поначалу показаться странными, потому что в этих языках нет сопоставимых функций.

На этом все. Всем хорошего дня!

Цикл статей по Gray Hat C#. Руководство для хакера по созданию и автоматизации инструментов безопасности.