.NET中的struct和class有什么区别?
.NET中的struct和class有什么区别?
在.NET中,有两类类型,引用类型和值类型。
结构是值类型,类是引用类型。
一般的区别在于引用类型位于堆上,并且值类型内联,也就是说,无论您的变量或字段是在哪里定义的。
包含值类型的变量包含整个值类型值。 对于结构来说,这意味着该变量包含整个结构及其所有字段。
包含引用类型的变量包含一个指针,或者指向实际值所在的内存中的其他位置的引用。
这有一个好处,首先:
在内部,引用类型被实现为指针,并且知道并知道变量赋值如何工作,还有其他行为模式:
当你声明变量或字段时,以下是两种类型的不同之处:
每个简短的摘要:
类仅:
仅结构:
类和结构:
在.NET中,结构和类声明区分了引用类型和值类型。
当你传递一个引用类型时,只有一个实际存储。 所有访问实例的代码都访问同一个代码。
当你传递一个值类型时,每一个都是一个副本。 所有的代码都在自己的副本上工作。
这可以用一个例子来显示:
struct MyStruct
{
string MyProperty { get; set; }
}
void ChangeMyStruct(MyStruct input)
{
input.MyProperty = "new value";
}
...
// Create value type
MyStruct testStruct = new MyStruct { MyProperty = "initial value" };
ChangeMyStruct(testStruct);
// Value of testStruct.MyProperty is still "initial value"
// - the method changed a new copy of the structure.
对于一个班级来说,这将是不同的
class MyClass
{
string MyProperty { get; set; }
}
void ChangeMyClass(MyClass input)
{
input.MyProperty = "new value";
}
...
// Create reference type
MyClass testClass = new MyClass { MyProperty = "initial value" };
ChangeMyClass(testClass);
// Value of testClass.MyProperty is now "new value"
// - the method changed the instance passed.
类可以是什么 - 参考可以指向一个null。
结构是实际值 - 它们可以是空的,但不能为空。 由于这个原因,结构体总是有一个没有参数的默认构造函数 - 它们需要一个“起始值”。
链接地址: http://www.djcxy.com/p/3627.html上一篇: What's the difference between struct and class in .NET?