在单个项目(即程序集)中,内部属性是否与public属性有什么不同?
我没有看到任何区别,但我想确保没有我想到的边缘案例。
答案 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将覆盖其可访问性,使其成为内部。