如何强制命名空间成员只对C#中直接包含命名空间的成员可见?

时间:2016-07-29 10:14:40

标签: c#

请考虑以下代码:

using System;

namespace Nesting
{
    class Program
    {
        static void Main()
        {
            new Nested.Class().Method();
        }
    }

    namespace Nested
    {
        internal class Class
        {   
            internal void Method()
            {
                Console.WriteLine("Inside Method");
            }
        }
    }
}

输出:

  

内部方法

这意味着Nesting成员可以访问internal成员Nested。有没有办法强制Nested的成员仅对其他Nested成员可见?

2 个答案:

答案 0 :(得分:3)

简而言之,不在同一个集会内。

与Java不同,internal可访问性(VB.Net中的Friend)是使类/成员仅在同一程序集中可见。

严格地说使用反射,你仍然可以到达另一个组件中的隐藏位。

另一种情况是使用嵌套类(而不是命名空间),例如:

internal class Nested
{
    protected class Class
    {   
        // Only usable from the Nested class
        internal void Method()
        {
            Console.WriteLine("Inside Method");
        }
    }
}

}

答案 1 :(得分:1)

不,你不能。所有三个相关的访问修饰符都没有给出你想要的东西。如果不将嵌套类拉到另一个程序集,就无法强制执行此操作。