Класс - это структура данных, которая может содержать описание данных (поля, константы, события), реализацию функциональных членов (процедуры/функции, свойства, конструкторы) и вложенные типы. Классы поддерживают механизм наследования, который позволяет производному классу расширять и специализировать базовый класс.
Определение класса состоит из опционального множества атрибутов класса, за которыми могут следовать опциональные модификаторы класса с последующим ключевым словом Class и именем класса. Далее опционально могут быть указаны родительский класс и список интерфейсы, которые должен реализовать текущий класс. После этого следует тело класса, завершаемое последовательностью ключевых слов End Class. Тело класса определяет множество членов данного класса.
Сигнатура класса может содержать модификаторы доступа Public или Friend, а также модификаторы Abstract или Final, указывающие назначение класса.
Abstract. Указывает на то, что класс является незавершённым (неполным) и может быть использован только в качестве базового для других. Не может быть явно создан экземпляр абстрактного класса, использование оператора New совместно с абстрактным классом приводит к ошибке компиляции. Возможно определение переменных и значений, чей тип во время компиляции будет представлен абстрактным классом, однако во время выполнения такие переменные будут либо пустыми, либо содержать ссылки на экземпляры классов, производных от данного и не являющихся абстрактными.
Final. Указывает на то, что класс является завершённым, то есть класс не может выступать в качестве базового для других классов. При указании завершенного класса в качестве базового для другого возникает ошибка компиляции. Модификатор Final обычно используется для запрещения нежелательного наследования, однако он также делает возможным некоторые оптимизации при выполнении кода. Например, возможно все вызовы виртуальных методов преобразовать в обычные, так как известно, что у данного класса не может быть наследников.
//Класс, доступный во всей сборке, а также в сборках
//где данная сборка подключена по ссылке
Public Class Class1
End Class;
//Класс, доступный во всей сборке
Friend Class Class2
End Class;
//Абстрактный класс
Abstract Class Class3
End Class;
//Класс, унаследованный от абстрактного
Class Class4: Class3
End Class;
//Завершенный класс, от которого нельзя наследовать
Final Class Class5
End Class;
В теле класса указываются собственные члены класса, а также могут быть переопределены члены родительского класса.
Члены класса делятся на следующие категории:
Константы, которые представляют собой константные значения, ассоциированные с классом.
Поля, которые являются переменными класса.
Конструкторы, которые определяют действия необходимые для инициализации экземпляров объектов данного класса или самого класса.
Свойства, которые определяют именованные характеристики класса и действия связанные с получением/установкой этих характеристик.
Методы, которые реализуют вычисления и действия связанные с классом.
События, которые определяют уведомления, генерируемые классом.
Члены класса могут быть экземплярными и статическими. Экземплярные члены могут быть вызваны у экземпляра класса, статические - непосредственно у самого класса. Константы неявно являются статическими. Для определения статического члена класса в его сигнатуре указывается модификатор Shared.
Если в классе имеется член, наименование и сигнатура которого полностью совпадает с членом родительского класса, то происходит скрытие члена родительского класса. При этом компилятор выдаёт предупреждающее сообщение. Данное поведение не является ошибкой, для скрытия сообщения компилятора добавьте в сигнатуру члена модификатор New.
При объявлении свойств или событий системой резервируются методы с определённой сигнатурой. Учитывайте это при определении собственных членов класса.
Class A
Public Shared Sub Test();
Begin
End Sub;
Public Function Test1(): Integer;
Begin
Return 1
End Function;
End Class;
Class B: A
New Public Shared Sub Test();
Begin
End Sub;
New Public Function Test1(): Integer;
Begin
Return 1
End Function;
End Class;
См. также: