2010-09-02 3 views
0

Очень надеюсь, кто-то может мне точку в правильном направлении, поскольку у меня нет никаких волос осталось больше ...Скрытие внутренних классов. Что мне не хватает?

Я занимаюсь разработкой простой SDK с помощью VB.NET в VS 2010 и у меня есть класс (OuterClass), который наследуется другой класс (InnerClass).

Есть, очевидно, свойства и методы в InnerClass, которые доступны через OuterClass.

Как я могу скрыть от своих потенциальных конечных пользователей, что InnerClass существует. Я не хочу скрывать внутренности InnerClass только то, что InnerClass даже там ...

Независимо от того, что я пытаюсь, он всегда отображается либо в просмотре классов, и в отладчике, либо в редакторе.

Я попытался обычные соперников:

<DebuggerBrowsable(DebuggerBrowsableState.Never)> _ 

и

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

Пожалуйста, может кто-то даже просто мне точку в правильном направлении. Я нашел несколько вещей, но все они связаны с C++, и они просто путают ... из меня.

ответ

0

Вы можете решить эту проблему с помощью интерфейсов и метода фабрики.

Public Interface IOuterClass 

End Interface 


Friend MustOverride InnerClass 

End Class 


Friend Class OuterClass 
    Implements IOuterClass 
    Inherits InnerClass 

End Class 


Public Class OuterClassFactory 

    Public Shared Function Create() as IOuterClass 
    Return New OuterClass() 
    End Function 

End Class 
+0

Спасибо за помощь! Очень ценится ... // А – thor69uk

1

Если OuterClass подклассы из InnerClass, то InnerClass должен быть как минимум видимым как OuterClass. Если вы действительно хотите скрыть InnerClass, вам нужно переключиться на «OuterClass использует InnerClass» вместо архитектуры OuterClass - InnerClass.

+0

Привет, Кен, Большое вам спасибо за то, что вернулись ко мне. Я понимаю, что вы имеете в виду, но я не уверен в его реализации. Не могли бы вы посоветовать на простом примере, пожалуйста? // A – thor69uk

+0

public class OuterClass { частный класс InnerClass { Публичный int Position {get; set;} } закрытый внутренний внутренний интерьер; public int Должность { get {return inner.Position; } set {inner.Position = значение; } } } –

+0

Привет, большое вам спасибо. Теперь концепция имеет смысл. Одна вещь, которую я только заметил, это то, что когда я написал это, я пропустил все важные моменты, что InnerClass также используется SecondaryClass, а также OuterClass. Если я перемещаю InnerClass вне OuterClass, чтобы сделать его доступным для SecondaryClass (даже если я определяю его как Friend), а затем добавьте над ним строку _, там она смотрит на меня от отладчика, как только я установил точку останова ... Что мне здесь не хватает ??? Еще раз спасибо. – thor69uk