“this”关键字可以与值类型一起使用吗?

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

public override int GetHashCode() { return this; } 

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

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

问候

是的, this对值类型有效。 它不会导致拳击。 虽然它引用了value-type,但它不是引用与引用类型引用相同的 – 它是编译/开发时间的便利而不是运行时引用。

C#规范的第7.5.7节规定:

  • 当在结构的实例构造函数中的primary-expression中使用它时,它被归类为变量。 变量的类型是发生用法的结构的实例类型(第10.3.1节),变量表示正在构造的结构。 结构的实例构造函数的this变量的行为与struct类型的out参数完全相同 – 特别是,这意味着必须在实例构造函数的每个执行路径中明确赋值变量。
  • 当在结构的实例方法或实例访问器中的primary-expression中使用它时,它被归类为变量。 变量的类型是发生用法的结构的实例类型(第10.1.3节)。
    • 如果方法或访问器不是迭代器(第10.14节),则此变量表示调用方法或访问器的结构,其行为与结构类型的ref参数完全相同。
    • 如果方法或访问器是迭代器,则此变量表示为其调用方法或访问器的结构的副本,其行为与结构类型的值参数完全相同。