对于一个项目,`internal`和`public`是一样的吗?

时间:2010-09-07 20:47:05

标签: c#

在单个项目(即程序集)中,内部属性是否与public属性有什么不同?

我没有看到任何区别,但我想确保没有我想到的边缘案例。

6 个答案:

答案 0 :(得分:11)

是的,当其他人引用您的程序集时,会出现差异。在这种情况下,只有public成员可见。但不要忘记,internal / private成员仍然可以通过Reflection / dynamics访问。此外,它不再标有BindingFlags.Public,而是使用BindingFlags.NonPublic

答案 1 :(得分:4)

是的,它是一样的。内部在同一个程序集中是公共的,因此如果您有一个程序集,则没有区别

答案 2 :(得分:3)

很多人都说是,但答案肯定不是。

如果有人参考你的装配,那么会有很大的不同!

答案 3 :(得分:2)

总的来说,是的。

在极少数情况下,可能存在差异,尤其是在特定于反射的情境中。例如,如果类型具有公共无参数构造函数,则Activator.CreateInstance(typeof(myType))将成功,但如果类型仅具有内部类型(至少在.NET 3.5上),则可能不会成功 - 您必须使用{{1}调用重载} = nonpublic

另外,请注意接口实现始终是公共的。因此,全部替换 - > “public” - 编辑器中的“internal”可能会产生无法编译的代码 - 编译器将拒绝允许您使用内部可见性实现接口的成员。

答案 4 :(得分:1)

从声明它的程序集开始,它是相同的。

答案 5 :(得分:1)

是的,基本上内部意味着类只能在程序集中使用,它的工作方式与程序集中的public相同。
但是如果你认为你的程序集将被任何项目使用,那么最好在可以引用的类上使用public。

此外,如果您将一个类声明为内部类,并将某个方法声明为public,则internal将覆盖其可访问性,使其成为内部。