代码之家  ›  专栏  ›  技术社区  ›  brickner

你选择什么,受保护的还是内部的?

  •  8
  • brickner  · 技术社区  · 15 年前

    protected internal . 我希望只有程序集中的派生类才能调用它。

    protected internal 方法 受保护的 内部的 ,你必须做出选择。在这种情况下你选择什么- 内部的

    5 回复  |  直到 15 年前
        1
  •  5
  •   Eric Lippert    15 年前

    我希望只有程序集中的派生类才能调用它。

    那么,你有两个选择。你可以保护它,每当你的一个客户扩展了你的类并调用了你的方法,而你发现了这个问题,你可以给他们写一封措辞严厉的信,告诉他们请停止这样做。或者你可以把它内部化,对你同事的代码进行代码检查,以确保他们不会使用不应该使用的方法。

    我猜后者更便宜,也更容易做。我会让它内部。

        2
  •  6
  •   Josh    14 年前

    你真的需要客观地思考这个方法的目的。对我来说,内部可访问性几乎总是感觉不好。主要是因为我在尝试从.NETFramework中的控件或类派生时遇到了困难,因为有人决定标记一个 方法为内部。最初的作者从未注意到没有访问该方法会使实现子类变得更加困难。

    编辑

    澄清一下,类的内部可访问性是非常有用的,我并不是说内部一般来说是不好的。我的观点是,在其他公共类上的内部方法在我看来是错误的。正确设计的基类不应给同一程序集中的派生类带来不公平的优势。

        3
  •  3
  •   brickner    15 年前

    internal . 通过这种方式,您可以保护程序集外部的人员不调用此方法,这只会让您小心,并且只能从派生类调用此方法。在你写的程序集中小心要比希望别人在使用它时小心容易得多。

        4
  •  1
  •   Igor Zevaka    15 年前

    protected internal protected 或者 internal . 对于这个确切的例子,我将使用 内部的 . 原因是如果封装被破坏了,我宁愿它是我,而不是不在我控制之下的人。

        5
  •  0
  •   Matin Habibi    15 年前

    我认为答案因你的需要而不同。

        public class YourClass
        {
           protected class InnerClass
           {
               internal void YourMethod()
               {
                   // Your Code
               }
           }
        }
    
    推荐文章