Иллюстрированный самоучитель по Visual Basic .NET

Атрибуты уровня доступа и создание объектов. 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_ перед именем переменной класса, однако подобные конструкции часто используются в С#; возможно, они встретятся в программе, сопровождение которой вам будет поручено.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.