C#hack:赋值给“this”

时间:2014-01-02 21:38:39

标签: c# class struct this

所有C#初学者都知道class是引用类型,struct是值1。 建议使用结构作为简单存储。 它们也可以实现接口,但不能从类派生,也不能起到基类的作用,因为它具有相当“价值”的性质。

假设我们对主要差异有所了解,但有一个困扰我。看看下面的代码:

public class SampleClass
{
    public void AssignThis(SampleClass data)
    {
        this = data; //Will not work as "this" is read-only
    }
}

这很清楚 - 当然我们不允许更改对象自己的指针,尽管在​​C ++中这样做是一种简单的做法。但是:

public struct SampleStruct
{
    public void AssignThis(SampleStruct data)
    {
        this = data; //Works fine
    }
}

为什么会这样?看起来好像struct this 不是指针。如果是真的,上面的分配如何工作?有自动克隆的机制吗?如果结构中有class会发生什么?

classstruct 这个的主要区别是什么?为什么它会以这种方式表现?

1 个答案:

答案 0 :(得分:9)

C#规范的这一部分与此相关(11.3.6)。

课程:

  

在类的实例构造函数或实例函数成员中,this被归类为值。因此,虽然这可以用于引用调用函数成员的实例,但是无法在类的函数成员中分配this

结构:

  

在结构的实例构造函数中,this对应于结构类型的out参数,并且在结构的实例函数成员中,this对应于ref。 1}}结构类型的参数。在这两种情况下,都将其归类为变量,并且可以通过分配this或将this作为ref传递来修改调用函数成员的整个结构体。或out参数。