该internal class Foo
声明将覆盖的可访问性public void Fee()
的方法,有效地使其内部.
在这种情况下,对方法使用internal vs. public将产生相同的效果.在这样的情况下,我选择公共方法与内部方法的唯一原因是,如果您选择这样做,将在未来版本中轻松过渡到公共类.
该internal class Foo
声明将覆盖的可访问性public void Fee()
的方法,有效地使其内部.
在这种情况下,对方法使用internal vs. public将产生相同的效果.在这样的情况下,我选择公共方法与内部方法的唯一原因是,如果您选择这样做,将在未来版本中轻松过渡到公共类.
答案中唯一缺少的是你为什么要这样做?
有些库有很多类,这些类不适合要触摸的库的使用者,但是它们必须继承标记为public的接口.例如,我有一个带有继承IComparer接口的类的库,但它只在内部使用,我不想混淆我的库的公共方面.如果我将已实现的Compare函数标记为内部,则编译器会抱怨我没有实现接口IComparer.
那么如何成功实现界面,同时防止它在我的图书馆的公共方面被访问?将该类标记为内部,但将已实现的函数标记为public.
实际上 - 如果你使用反射,会有很大的不同; 特别是,如果您尝试通过反射访问内部方法,Silverlight可能会非常沮丧,即使您有访问权限也是如此.我已经看到过必须公开方法以使代码在Silverlight上运行的情况,即使它适用于常规.NET.
您可能会在常规.NET中找到相同的部分信任.
当您希望内部类实现接口时,它会有所不同.作为某个接口的实现的方法必须是Public.
您是对的,费用和Fi都可以同等使用.
从CSharp语言规范3.0,3.5.2下:
在程序P中的类型T中声明的嵌套成员M的可访问域定义如下(注意M本身可能是一个类型):
•如果M的已声明可访问性是公共的,则M的可访问域是T的可访问域.
因此,即使费用被宣布为公开,它也将像Foo(即内部)一样可访问.