所有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
会发生什么?
class
和struct
这个的主要区别是什么?为什么它会以这种方式表现?
答案 0 :(得分:9)
C#规范的这一部分与此相关(11.3.6)。
课程:
在类的实例构造函数或实例函数成员中,
this
被归类为值。因此,虽然这可以用于引用调用函数成员的实例,但是无法在类的函数成员中分配this
。
结构:
在结构的实例构造函数中,
this
对应于结构类型的out
参数,并且在结构的实例函数成员中,this
对应于ref
。 1}}结构类型的参数。在这两种情况下,都将其归类为变量,并且可以通过分配this
或将this
作为ref
传递来修改调用函数成员的整个结构体。或out
参数。