2016-07-29 22 views
0

考慮下面的代碼:如何強制一個名稱空間成員僅對其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成員被允許訪問的Nestedinternal成員。有沒有辦法強制Nested的成員只對其他Nested成員可見?

+0

在.NET中,命名空間有*的訪問限制沒有*的影響。它們是正交的概念。 –

回答

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

不,你不能。所有這三個相關的訪問修飾符都不會給你想要的。如果不將嵌套類拉到另一個程序集中,則無法執行此操作。

相關問題