我对你会使用哪种方案感到困惑.
如果您的程序集中包含一些公共和私有(或内部)类型,则只能从外部使用公共类型.任何内部或私人的类型都不应该可用,事实上,它们的存在不应该是可发现的.
因此,GetTypes和GetExportedTypes-在我的脑海里,应该返回同样的事情.
显然我在想这个错误 - 每个人都有什么用?
谢谢!
语言级别的可见性与反射级别的类型可见性无关。
反射的整个想法是你可以看到所有类型、成员等并检查它们;比如说用于代码生成目的或其他目的。同样,您也会遇到这样的情况:InternalsVisibleToAttribute使用 的情况,以及正如其他人所说的,当您需要反映自己的程序集时。这些都是完全合法的,如果不可用的话,这些都是不可能的(从而严重限制 .Net 框架)。
因此,默认值应该是返回所有类型 - 仅当尝试在运行时使用类型时,可见性才会出现。也可以侧步;.Net框架本身依赖于一些能够实例化其他程序集自己的私有类型的场景;您也可以跳过对自己动态构建的程序集的可见性检查。我在为我们的内部应用程序编写的自定义 IOC 和 DI 框架上使用此功能,以允许我们的开发人员使类型完全对外部代码隐藏,但仍可在其应用程序中使用。