Type
的一切都具有反射性质。这是因为 Type
比 System.Reflection
中的其他类更常用吗?还是因为它的功能更像系统类而不是反射类?
简而言之,我一直想知道 System.Type
位置背后的动机。
Type
的一切都具有反射性质。这是因为 Type
比 System.Reflection
中的其他类更常用吗?还是因为它的功能更像系统类而不是反射类?
简而言之,我一直想知道 System.Type
位置背后的动机。
Assembly
位于 System.Reflection
,这很奇怪。Object
实现方法 GetType
有关,该方法返回一个 Type
。Object.getClass
与此类似。 - Josh LeeMemberInfo
也应该在System
命名空间中,对吧?Type
实现了GetMember()
方法,该方法返回一个MemberInfo
。在BCL中,命名空间的前向引用随处可见。 - JoeObject.GetType()
的使用情况比Object.GetType().GetMember()
要频繁得多。 - João AngeloType
位于System.Reflection
中,你仍然可以使用o.GetType.FullName
而无需额外的using
块。但是,如果要对Type
进行其他操作,通常还是需要添加using System.Reflection
,即使它在System
中也是如此。 - JoeType类不仅仅在System.Reflection中使用,还在许多其他地方使用。通过Reflector进行快速搜索会发现有数百个使用它的地方。它在System.Configuration、System.Data、System.Drawing、System.Linq、System.Windows.Forms等方面非常关键。在这些类中实际使用Type实例的方式是不可见的。很可能使用了System.Reflection,但这只是一个实现细节,不会影响程序。
考虑到使用typeof运算符和object.GetType可以轻松创建这些类所需的Type实例,并且除非实际编写反射代码,否则您永远不必使用System.Reflection,因此Type在System命名空间中应该有一个易于访问的位置。
我猜这是因为Object作为GetType方法的原因。
微软编码实践告诉我们,一个类不应该引用子命名空间中的类型。但实际上,BCL经常违反这个规则 ;o)