由于Control.CreateChildControls被标记为受保护的内部,因此它不应在内部可见

时间:2010-03-03 23:15:01

标签: c# asp.net inheritance

我无法弄清楚为什么Control.CreateChildControls在网页的代码隐藏类中可见。也就是说,Control.CreateChildControls定义为protected internal,这意味着该方法仅对位于与Control类相同的程序集内的派生类可见。那么怎么可能,因为据我所知,web-page类没有编译成与Control类(System.Web.dll)相同的程序集?

感谢名单

3 个答案:

答案 0 :(得分:2)

不幸的是,“受保护的内部”的措辞具有误导性。这意味着'受保护''内部'而非'受保护''内部'。

在你的%程序文件%\ microsoft visual studio 9.0 \ vc#\ Specifications \ 1033中,你有C#参考手册,这是在1.6.2节。

因此派生类可以使用它。

答案 1 :(得分:2)

我发现将“受保护与内部”与“受保护或内部”之间的差异描述为非常无益。哪个是“内部保护”?

你可以说“受保护的内部是受保护的内部的限制最少的组合,因此它意味着'受保护的内部'”。

您还可以说“受保护的内部限制对派生成员的访问成员,因此它意味着'受保护的内部'”。

呸。

更好的思考方式是:

  • 成员的默认辅助功能是“私有” - 可能性最小的辅助功能域
  • 修饰符会放大成员的可访问性域
  • 因此受保护的内部扩展了两倍的可访问性域,一次扩展到派生成员,一次扩展到程序集成员。

有关此问题的更多想法,请参阅:

http://blogs.msdn.com/ericlippert/archive/2008/04/24/why-can-t-i-access-a-protected-member-from-a-derived-class-part-three.aspx

答案 2 :(得分:1)

Page类继承自Control,它们都在System.Web.UI命名空间中,并且都在System.Web程序集中。