C#hack:赋值给"this"

Ily*_*huk 6 c# struct class this

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

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

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

这很明显 - 当然我们不允许改变对象自己的指针,尽管在C++中这样做是一种简单的做法.但:

public struct SampleStruct
{
    public void AssignThis(SampleStruct data)
    {
        this = data; //Works fine
    }
}
Run Code Online (Sandbox Code Playgroud)

它为什么有效?它确实看起来struct this不是一个指针.如果是真的,上面的分配如何工作?有自动克隆的机制吗?如果class结构内部会发生什么?

什么是主要的差异classstruct 这个,为什么它以这样一种方式表现?

Ant*_*t P 9

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

课程:

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

结构:

在struct的实例构造函数中,this对应于outstruct类型的参数,并且在struct的实例函数成员中,this对应于refstruct类型的参数.在这两种情况下,这被归类为一个变量,它可以修改的量,功能部件是由分配给调用的整个结构this或通过传递this作为refout参数.