Модификаторы доступа к классам .NET (друг и публика) - PullRequest
0 голосов
/ 05 октября 2010

Я занимаюсь разработкой библиотеки классов, которая будет использоваться в нескольких проектах.

В моей библиотеке классов есть класс "Shape", который имеет ряд свойств.Одним из этих свойств является «Измерения», возвращающий класс со свойствами «Высота», «Ширина» и «Глубина».

Как запретить отображение класса Dimension в редакторе, в то время как он свободно доступен в классебиблиотека?

Я поместил команду в файл класса, но это скрывает ее в библиотеке и моем приложении.

<ComponentModel.EditorBrowsable(ComponentModel.EditorBrowsableState.Never)> _

Я также изменил модификатор доступа к классу на Friend,но это препятствует общедоступному доступу к свойству в классе Shape при вызове вне библиотеки классов.

Все, что я хочу сделать, - это предотвратить создание экземпляра класса Dimension вне библиотеки классов.

Спасибо.

Это функция кода, которую я хотел бы достичь:

Interface IShape

    ReadOnly Property Properties() As ShapeProperties

End Interface

Public Class Shape

    Implements IShape

    Dim _Properties As New ShapeProperties(0, 0, 0)

    Sub New()
        _Properties = New ShapeProperties(3, 4, 5)
    End Sub

    Public ReadOnly Property Properties() As ShapeProperties Implements IShape.Properties
        Get
            Return _Properties
        End Get
    End Property

End Class

Friend Class ShapeProperties

    Dim _Height As Integer = 0
    Dim _Width As Integer = 0
    Dim _Depth As Integer = 0

    Friend Sub New(ByVal h As Integer, ByVal w As Integer, ByVal d As Integer)
        _Height = h
        _Width = w
        _Depth = d
    End Sub

    Private ReadOnly Property Height() As Integer
        Get
            Return _Height
        End Get
    End Property
    Private ReadOnly Property Width() As Integer
        Get
            Return _Width
        End Get
    End Property
    Private ReadOnly Property Depth() As Integer
        Get
            Return _Depth
        End Get
    End Property

End Class

Я не смог скомпилировать библиотеку классов в приведенном выше коде.Я хочу, чтобы ShapeProperties был доступен только в классе Shape, а не сам по себе.Единственный способ решить эту проблему - это изменить свойство доступа ShapeProperties, что не то, что мне нужно.

ClassLibrary.Shape в порядке, но ClassLibrary.Properties - нет.

1 Ответ

1 голос
/ 05 октября 2010

Вы можете создать открытый интерфейс (IShape) и создать закрытый класс, который его реализует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...