簡體   English   中英

“內部”成員的細粒度可見性

[英]Fine-grained visibility for 'internal' members

最近我讀到有關分區與.NET程序集的代碼和偶然從一個很好的建議, 這個帖子 :“減少你的.NET程序集的數量進行嚴格的最低限度”。

我不能同意! 我個人經常看到的原因之一是,人們只想隔離一些代碼,因此他們將類型/方法內部化並將它們放入一個單獨的項目中。

將代碼拆分為多個程序集還有許多其他原因(有效和無效),但是如果要將組件/ API隔離在一個庫中,那么如何隔離組件/ API,那么如何做到這一點呢?

namespace MyAssembly.SomeApiInternals
{
     //Methods from this class should not 
     //be used outside MyAssembly.SomeApiInternals
     internal class Foo
     {              
          internal void Boo() { }
     }
}

namespace MyAssembly.AnotherPart
{
     public class Program
     {              
          public void Test() 
          {
               var foo = MyAssembly.SomeApiInternals.Foo();
               foo.Boo(); //Ok, not a compiler error but some red flag at least 
          }
     }
}             

如何限制類型/方法在同一個程序集中被其他類型/方法使用但在此命名空間之外?

(我將自己給出一些答案,看看人們會如何投票。)

謝謝!

您可以將代碼放在不同的程序集中,然后在構建后的步驟中將程序集與ILMerge合並......

使用NDepend並輸入體現您想要的CQL規則並將其作為構建的一部分運行。 該語言對此級別的限制不感興趣。 (我還沒有關注你的鏈接 - 你是否真的試圖在沒有NDepend的情況下做到這一點?你的答案應該在其中進行規則)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM