Атрибуты уровня доступа и создание объектов. Me.
Атрибуты уровня доступа, установленные для класса, управляют возможностью создания объектов соответствующего типа. Грубо говоря, они являются отдаленным аналогом свойства Instancing в VB6, хотя для некоторых значений Instancing приходится дополнительно учитывать уровень доступа конструктора. В табл. 4.5 описано соответствие между свойством Instancing VB6 и комбинациями атрибутов уровня доступа класса и конструктора.
Таблица 4.5. Значения свойства Instancing и атрибуты уровня доступа.
Свойство Instancing VB6 | Аналог в VB.NET |
---|---|
Private | Класс объявляется с атрибутом Private |
PublicNotCreatable | Класс объявляется с атрибутом Public, но конструктор объявляется с атрибутом Friend |
Singlellse и GlobalSingleUse | Нет аналога в VB.NET |
MultiUse | И класс, и конструктор объявляются с атрибутом Public |
Me
Если класс используется как шаблон для создания однотипных объектов, программист должен иметь возможность сослаться на текущий объект, которому принадлежит выполняемый код. Зарезервированное слово Me всегда интерпретируется как объектная переменная, обозначающая текущий экземпляр. Применение Me гарантирует, что неоднозначная конструкция будет интерпретирована в контексте текущего класса.
Также стоит заметить, что один из самых распространенных (и самых нелепых) примеров использования Me встречается в ситуациях вроде следующей:
Public Class Point Private x As Integer Private у As Integer Public Sub New(ByVal x As Integer.ByVal у As Integer) Me.x = x Me.у = у End Sub ' И т.д. End Class
Запись Me.x используется для того, чтобы отличить поле х экземпляра от параметра х, передаваемого при вызове метода New. Конечно, проблема легко решается добавлением префикса m_ перед именем переменной класса, однако подобные конструкции часто используются в С#; возможно, они встретятся в программе, сопровождение которой вам будет поручено.