【问题标题】:Hiding inner classes. What am I missing?隐藏内部类。我错过了什么?
【发布时间】:2010-09-02 22:53:23
【问题描述】:

真的希望有人能指出我正确的方向,因为我已经没有头发了......

我正在 VS 2010 中使用 VB.NET 开发一个简单的 SDK,并且我有一个继承另一个类 (InnerClass) 的类 (OuterClass)。

InnerClass 中显然有可以从OuterClass 访问的属性和方法。

我怎么能对我的潜在最终用户隐藏 InnerClass 甚至存在。我不想隐藏 InnerClass 内部结构,只是 InnerClass 甚至在那里......

无论我尝试什么,它始终在类查看器、调试器或编辑器中可见。

我已经尝试过通常的竞争者:

<DebuggerBrowsable(DebuggerBrowsableState.Never)> _

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

请有人能指出我正确的方向。我发现了一些东西,但它们都与 C++ 有关,它们只是让我感到困惑。

【问题讨论】:

    标签: vb.net class inheritance private


    【解决方案1】:

    如果 OuterClass 是 InnerClass 的子类,则 InnerClass 必须至少与 OuterClass 一样可见。如果您真的想隐藏 InnerClass,那么您需要切换到“OuterClass 使用 InnerClass”架构而不是“OuterClass 是 InnerClass”架构。

    【讨论】:

    • 嗨,Ken,非常感谢您回复我。我明白你的意思,但我不确定它的实施。你能用一个简单的例子来建议吗? //一个
    • 公共类 OuterClass { 私有类 InnerClass { public int Position { get;设置;} } 私有 InnerClass 内部; public int Position { get { return inner.Position; } 设置 { 内部.Position = 值; } } }
    • 嗨,非常感谢。现在这个概念很有意义。我刚刚注意到的一件事是,当我写这篇文章时,我错过了所有重要的一点,即 SecondaryClass 和 OuterClass 也使用 InnerClass。如果我将 InnerClass 移到 OuterClass 之外以使其可供 SecondaryClass 访问(即使我将其定义为 Friend),然后在其上方添加 _ 行,它就会盯着我看我一设置断点就从调试器...我在这里错过了什么???再次感谢大家。
    【解决方案2】:

    你可以用接口和工厂方法解决这个问题。

    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
    

    【讨论】:

    • 感谢您的帮助!非常感谢... //A
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-20
    • 2021-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多