【问题标题】:Hiding namespaces containing only internal types in a class library?在类库中隐藏仅包含内部类型的命名空间?
【发布时间】:2010-10-17 18:21:48
【问题描述】:

我有一个类库,它有几个只包含内部类型的命名空间。

但是,当在应用程序项目中使用类库时,命名空间会以智能感知方式显示,但它们当然是空的。在其他项目中使用智能感知时,我有什么办法可以完全隐藏命名空间?

我也尝试将EditorBrowsableAttribute 应用于所有内部类,但我想做的是将其应用于命名空间,这当然是不可能的。

或者,如果我足够关心这一点,我必须将类型移动到包含公共类型的命名空间中的唯一选择?

【问题讨论】:

  • 这对 Google 来说有点困难......对于想要在命名空间或程序集中隐藏类的人来说,一切都在不断涌现。

标签: c# namespaces intellisense hide internal


【解决方案1】:

这取决于你如何引用你的类库:

  • 如果您的解决方案中包含类库项目并使用项目引用,您将始终通过 Intellisense 看到空的命名空间。
  • 如果您引用的是类库的已编译 dll,则不会在智能感知中看到弹出的命名空间,前提是它只包含内部成员。

试试这个:

namespace ClassLibrary1
{
    namespace Internal
    {
        internal class InternalClass
        {
            public int internalStuff { get; set; }
        }
    }

    namespace Public
    {
        public class PublicClass
        {
            public int publicStuff { get; set; }
        }
    }
}

如果您通过项目引用来引用它,您将看到空的命名空间。如果您引用它的 dll,则不会。

【讨论】:

  • 在阅读这个答案之前,我开始将一组类和东西组织到子文件夹中,同时将它们保存在项目的根命名空间中,但这真的感觉不对。我绝对可以忍受它们只在项目引用中可见,所以现在我要开始添加子命名空间了。
【解决方案2】:

我之前遇到过这个问题,但没有找到解决方案,只有一个解决方法,它可能适用于您的项目,也可能不适用于您的项目。您可以使用嵌套的静态类来代替定义命名空间吗?

【讨论】:

  • 是的,我可以这样做,但是我需要重新连接所有引用,因为嵌套类需要成为所有地方的限定名称的一部分。 IE。我需要这样写: var x = new NotReallyANamespace.ClassName();而不仅仅是添加 using 指令。为想法+1 :)
  • 我知道,离完美还有很长的路要走:(
  • 现在 C# 有了using static,嵌套静态类方法变得更加可行。
猜你喜欢
  • 1970-01-01
  • 2010-11-21
  • 2021-12-23
  • 1970-01-01
  • 1970-01-01
  • 2019-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多