internal class Foo
{
public void Fee()
{
Debug.WriteLine("Fee");
}
internal void Fi()
{
Debug.WriteLine("Fi");
}
}
我认为由于整个类已经是内部的,因此Fee()和Fi()同样可以被访问。我有忽略什么吗?在这种情况下选择public或internal方法是否有任何理由?
internal class Foo
{
public void Fee()
{
Debug.WriteLine("Fee");
}
internal void Fi()
{
Debug.WriteLine("Fi");
}
}
我认为由于整个类已经是内部的,因此Fee()和Fi()同样可以被访问。我有忽略什么吗?在这种情况下选择public或internal方法是否有任何理由?
internal class Foo
声明将会覆盖 public void Fee()
方法的可访问性,使其变为 internal。
在这种情况下,在方法上使用 internal 和 public 将会有相同的效果。我之所以在这种情况下选择公共方法而不是内部方法,只是为了方便在以后的版本中过渡到公共类(如果您选择这样做)。
这个答案唯一缺少的是为什么要这样做?
有些库有很多类,不是为库的使用者所接触的,但它们必须继承标记为公共的接口。例如,我有一个库,其中一个类继承了IComparer接口,但它只在内部使用,我不想在我的库的公共方面添加混乱。如果我将实现的Compare函数标记为internal,则编译器会抱怨我没有实现IComparer接口。
那么,如何成功实现接口并同时防止其在库的公共方面被访问?将类标记为internal,但将实现的函数标记为public。
实际上,如果你使用反射,会有很大的区别;特别是在Silverlight中,即使你本来就有权限访问,如果你试图通过反射访问内部方法,它也可能会出现问题。我曾经遇到过这种情况,必须将一个方法公开才能让代码在Silverlight上运行,尽管它在常规.NET上可以正常工作。
在常规.NET中,你可能会发现与部分信任相关的类似情况。
如果您希望内部类实现接口,则会产生差异。实现某些接口的方法必须是public。