繁体   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