【发布时间】:2014-07-07 06:12:10
【问题描述】:
与Getting all types that implement an interface 相关的我们可以很容易地获取Assembly 中实现特定接口的所有Type。
例子:
interface IFace
{
}
class Face : IFace
{
}
class TwoFace : Face
{
}
对于这个结构,我们将通过反射找到 both 类,即所有从第一个实现派生的类,使用
GetTypes().Where(
type => type.GetInterfaces().Contains(typeof(IFace))
)
所以问题是:如何将结果限制在最初实现接口的基类中?! 在这个例子中:只有类类型 Face 是相关的。
【问题讨论】:
-
注意:迭代所有找到的类/类型,检查一个是否派生自另一个似乎不切实际,对我来说也不是性能
-
这是使用反射的限制。接口不知道哪些类实现了它,因此如果不迭代所有内容,您就无法获得它们。如果你想要更好的性能,你可能需要 Roslyn。
-
@childno.de 一旦你已经迭代了程序集中的所有类型,它不会对简单地检查 thm 的继承产生任何额外的性能影响
-
你可以通过让不需要的类另外实现一些
IFaceFake接口来欺骗它。 -
@childno.de:你有证据认为它不切实际吗?猜测性能几乎从来都不是一个好主意。
标签: c# reflection