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

时间:2009-02-18 20:44:06

标签: c# .net

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

public override int GetHashCode()
{
    return this;
}

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

来自MSDN中“this”关键字的文档: - this关键字引用类

的当前实例

此致

1 个答案:

答案 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的方法或方法   访问器被调用,并且表现得很好   与值参数完全相同   结构类型。
    •   
  •