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




Практическое использование вложенных классов на примере связанного списка - часть 2


32 Public Readonly Property GetCurrentLink()As Link

33 Get

34 Return m_CurrentLink

35 End Get

36 End Property

37 Public Readonly Property GetFirstUnkOAs Link

38 Get

39 Return m_FirstLink

40 End Get

41 End Property

42

43 ' Вложенный класс для ссылок

44 Friend Class Link

45 Private m_MyData As String

46 Private m_NextLink As Link

47 Friend Sub New(ByVal myParent As Link.ByVal theData As String)

48 m_MyData - theData

49 myParent.m_NextLink = Me

50 ' End Sub

51 Friend Sub New(ByVal theData As String)

52 m_MyData =theData

53 End Sub

54 Friend Readonly Property MyData()As String

55 Get

56 Return m_MyData

57 End Get

58 End Property

59 Friend Readonly Property NextLink()As Link

60 Get

61 Return m_NextLink

62 End Get

63 End Property

64 End Class

65 End Class

66 End Module

Строка 4 создает новый экземпляр связанного списка. В строке 5 определяется объектная переменная типа Link. Поскольку класс Link является вложенным по отношению к LinkedList, его тип записывается в виде «полного имени» LinkedList.Link. Строки 6-12 содержат небольшую тестовую программу.

В строках 17-20 определяется конструктор класса LinkedList, в котором вызывается второй конструктор класса Link (строки 51-53). Последний объявлен с атрибутом Friend и потому доступен для внешнего класса Li nkedLi st. Если бы конструктор Link был объявлен с атрибутом Private, то он стал б"ы недоступным для внешнего класса.

Также стоит обратить внимание на то, как в первом конструкторе класса Link (строки 47-50) организуется ссылка на только что созданный элемент списка из предыдущего элемента. Для этого используется ключевое слово Me — это очень принципиальный момент, поэтому строка 49 выделена в листинге жирным шрифтом. На первый взгляд команда myParent.m_NextLink = Me выглядит недопустимой, поскольку мы обращаемся к закрытому полю родительского класса myParent. Однако программа все-таки работает! Итак, запомните очень важное правило:

Для экземпляра класса всегда доступны закрытые поля других экземпляров этого класса.

При написании подобных классов в VB .NET можно обойтись и без использования этой нетривиальной особенности классов. Например, в класс Link можно включить специальный метод для создания ссылки на следующий элемент списка. В конечном счете выбор зависит только от вашего стиля программирования. Тем не менее сама возможность обращения к закрытым членам класса может преподнести неприятные сюрпризы, и об этом необходимо знать. По этой причине в нашем примере продемонстрирован именно такой подход.




Содержание  Назад  Вперед