如何强制命名空间成员仅对其在C#中直接包含的命名空间的成员可见?
考虑以下代码:如何强制命名空间成员仅对其在C#中直接包含的命名空间的成员可见?,c#,C#,考虑以下代码: using System; namespace Nesting { class Program { static void Main() { new Nested.Class().Method(); } } namespace Nested { internal class Class { interna
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");
}
}
}
}
输出:
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");
}
}
}
}
内法
这意味着
嵌套
成员可以访问嵌套
的内部
成员。是否有办法强制嵌套的成员仅对其他嵌套的成员可见?不,您不能。所有三个相关的访问修饰符都不能满足您的需要。如果不将嵌套类拉到另一个程序集,则无法强制执行此操作。不,您不能。所有三个相关的访问修饰符都不能满足您的需要。如果不将嵌套类拉到另一个程序集中,则无法强制执行此操作。简而言之,不在同一程序集中
与Java不同,internal
可访问性(Friend
在VB.Net中)使类/成员仅在同一程序集中可见
严格地说,通过使用反射,您仍然可以找到另一个程序集中的隐藏位
另一种方案是使用嵌套类(而不是名称空间),例如:
internal class Nested
{
protected class Class
{
// Only usable from the Nested class
internal void Method()
{
Console.WriteLine("Inside Method");
}
}
}
}简而言之,不在同一组件内
与Java不同,internal
可访问性(Friend
在VB.Net中)使类/成员仅在同一程序集中可见
严格地说,通过使用反射,您仍然可以找到另一个程序集中的隐藏位
另一种方案是使用嵌套类(而不是名称空间),例如:
internal class Nested
{
protected class Class
{
// Only usable from the Nested class
internal void Method()
{
Console.WriteLine("Inside Method");
}
}
}
}在.NET中,名称空间对访问限制没有影响。它们是正交概念。在.NET中,名称空间对访问限制没有影响。它们是正交概念。