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

本文关键字:命名空间 成员 包含 何强制 | 更新日期: 2023-09-27 17:59:08

考虑以下代码:

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成员访问Nestedinternal成员。有没有办法强制Nested的成员只对其他Nested成员可见?

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

简而言之,不在同一程序集中。

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

严格地说,使用反射,你仍然可以在另一个程序集中找到隐藏的部分。

另一种情况是使用嵌套类(而不是名称空间),因此类似于:

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

}

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