【问题标题】:How does 'typeof' work?“typeof”是如何工作的?
【发布时间】:2011-03-09 22:10:51
【问题描述】:

我很好奇 C# 中 typeof 的“方法体”会是什么样子(很确定我无法在反射器中找到它,因为它是关键字而不是方法)。

我猜它相当于 GetType(magic convert symbol to string)。

查看Reflector中的GetType(string)它调用了一个方法“PrivateGetType”,它调用了“RuntimeTypeHandle.GetTypeByName”,而RuntimeTypeHandle似乎有很多类型背后的逻辑,但是GetTypeByName的东西没有显示在反射器中。

【问题讨论】:

    标签: c# types


    【解决方案1】:

    如果你这样做:

    Type t = typeof(string);
    

    然后编译器将typeof(string)位编译成ldtoken MSIL指令,然后调用Type.GetTypeFromHandle获取Type类的实例。

    Type.GetTypeFromHandle 由运行时实现(这就是它被标记为“MethodImplOptions.InternalCall”属性的原因)。您可以查看 mono 的源代码以了解其实际实现方式,但您基本上必须了解整个元数据系统才能了解 Type 和朋友在内部如何工作......

    【讨论】:

    • 感谢这是正确的。正如你所说,GetTypeFromHandle 也是外部的,但我正在考虑为这种事情寻找单声道,所以它可能值得花时间投资。
    猜你喜欢
    • 2017-08-06
    • 2020-12-24
    • 1970-01-01
    • 2010-11-16
    • 2020-11-25
    • 1970-01-01
    • 2010-12-22
    • 2021-05-04
    • 1970-01-01
    相关资源
    最近更新 更多