代码之家  ›  专栏  ›  技术社区  ›  Waleed Eissa

“this”关键字是否可以用于值类型?

  •  6
  • Waleed Eissa  · 技术社区  · 15 年前

    在查看.NET Reflector中Int32.GetHashCode()的反汇编代码时,我注意到“this”关键字的有趣用法:

    public override int GetHashCode()
    {
        return this;
    }
    

    我一直认为“this”只用于引用类型,而不是值类型。在上面的代码中,每次尝试获取int的哈希代码时都会使用boxing吗?

    从msdn中“this”关键字的文档中: -this关键字引用类的当前实例

    当做

    1 回复  |  直到 15 年前
        1
  •  13
  •   Jeff Yates    15 年前

    对, this 对于值类型有效。这不会导致拳击。虽然它引用了值类型,但它与引用类型引用的方式不同——它是编译/开发时的便利,而不是运行时引用。

    C规范第7.5.7节规定:

    • 当它用于 实例中的主表达式 结构的构造函数,它是 分类为变量。类型 变量是实例类型 (_§10.3.1)其中 使用发生,变量 表示结构为 构建。的这个变量 结构的实例构造函数 行为与out完全相同 结构类型“_”的参数 特别是,这意味着 必须明确指定变量 在每个执行路径中 实例构造函数。

    • 当这是 在主表达式中使用 实例方法或实例访问器 对于结构,它被分类为 变量。变量的类型为 实例类型(_§10.3.1) 在其中发生使用的结构。
      • 如果方法或访问器不是 迭代器(_§10.14),此变量 表示的结构 调用了方法或访问器,并且 行为与引用完全相同 结构类型的参数。
      • 如果 方法或访问器是迭代器, 此变量表示 方法或 调用了访问器,并执行 与值参数完全相同 结构类型的。