C#中内部类和公共类的区别是什么?

3
以下类声明的含义是什么?
internal class A { }

public class B { }

我能够使用包含类A和B的程序集的引用,在另一个程序集中的另一个类中访问它们两个。在类方面,内部和公共访问修饰符有什么区别?


你不应该能够从另一个程序集访问A类。 - Blorgbeard
1
@Blorgbeard 除非他正在使用 InternalsVisibleToAttribute - Lukazoid
1
是的,但你会认为他会在问题中提到这一点——这不是你可以通过错误来做到的。 - Blorgbeard
也许这是在一个已经建立的项目中,而且没有意识到它已经存在了。我不反对你的观点,只是指出一个小小的注意事项 :) - Lukazoid
正如Lukazoid所说,除非你为该程序集使用了InternalsVisibleToAttribute,否则你不应该能够从另一个程序集中访问internal类A。也许你误解了程序集的定义? - Jan Paolo Go
2个回答

7

Internal只能在所属的程序集内部使用。

Public可以被任何引用所属程序集的程序集使用。

如果您可以从另一个程序集访问internal类,则可能已设置“InternalsVisibleTo”,或者您没有引用您认为的类。


如何更改InternalsVisibleTo? - Aditya Shukla
@AdityaShukla - 在你的 AssemblyInfo.cs 文件中,你可以加入 [assembly:InternalsVisibleTo("AssemblyB")] 以便让内部类、方法等对 AssemblyB 可见。这通常用于测试目的。 - Logarr

1

internal 意味着它只能被同一程序集中的其他类访问。public 意味着它可以被所有其他类访问。


两者之间没有技术上的区别。在C#中,public意味着“对可以看到该类的任何人都可访问”;将内部类的公共成员设置为public并不会使成员比将其设置为internal更容易访问。 - ankit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接