在.NET Reflector中查看Int32.GetHashCode()的反汇编代码时,我注意到了这个有趣的“this”关键字:
public override int GetHashCode()
{
return this;
}
我一直认为“this”仅用于引用类型而不是值类型。在上面的代码中,每次尝试获取int的哈希码时都会使用装箱吗?
来自MSDN中“this”关键字的文档: - this关键字引用类
的当前实例此致
答案 0 :(得分:13)
是的,this
对值类型有效。它不会导致拳击。虽然它引用了value-type,但它不是与引用类型引用相同的引用 - 它是编译/开发时的便利而不是运行时引用。
C#规范的第7.5.7节规定:
- 当在...中使用它时 实例中的primary-expression 结构的构造函数,它是 归类为变量。的类型 变量是实例类型 结构的(第10.1.1节) 使用情况和变量 代表结构 建造。这个变量 struct的实例构造函数 表现完全相同 struct type-in的参数 特别是,这意味着 变量必须明确赋值 在每个执行路径中 实例构造函数。
- 当这是 用于一个主要表达式 实例方法或实例访问器 一个结构,它被归类为一个 变量。变量的类型是 的实例类型(第10.3.1节) 发生使用的结构。
- 如果方法或访问者不是 iterator(§10.14),这个变量 表示结构的结构 方法或访问器被调用,和 表现与ref完全相同 结构类型的参数。
- 如果 方法或访问器是一个迭代器, 这个变量代表了一个副本 struct的方法或方法 访问器被调用,并且表现得很好 与值参数完全相同 结构类型。