internal class Foo
{
public void Fee()
{
Debug.WriteLine("Fee");
}
internal void Fi()
{
Debug.WriteLine("Fi");
}
}
我认为Fee()和Fi()可以平等地访问,因为整个类已经在内部。我在俯视什么吗?在这种情况下,是否有任何理由选择公共或内部方法?
Answers:
答案中唯一缺少的是您为什么要这样做?
一些库具有许多类,这些类并不是让库的使用者接触的,但是它们必须继承标记为public的接口。例如,我有一个带有继承IComparer接口的类的库,但该类仅在内部使用,我不想使我的库的公共方面混乱。如果我将实现的Compare函数标记为内部函数,则编译器会抱怨我没有实现IComparer接口。
那么,如何成功实现该接口并同时防止在我的库的公共方面访问该接口?将类标记为内部,但将已实现的功能标记为公共。
实际上-如果使用反射,则有很大的不同;特别是,如果您尝试通过反射来访问内部方法,即使您有访问权限,Silverlight也会非常不高兴。我见过一些场合,我必须公开一种方法以使代码在Silverlight上运行,即使它在常规.NET上也可以运行。
您可能会发现在常规.NET中拥有部分信任的情况。
根据msdn文档,您的Foo类在程序集之外是不可访问的,因此将这些方法标记为内部或公共方法没有任何区别。使用属性InternalsVisibleTo甚至没有什么区别