C++ VS C# 结构体和对象的细微区别
类与结构体在C++与C#中都是可以使用的,但是两者在两种语言中的区别却很大,今天在这里进行一下记录。
在C++中,类与结构体的唯一区别就是默认访问权限的区别。在struct中,默认的访问权限为public,而在类中,默认的访问权限为private。
举例一段代码,这样更容易理解:
class MyClass
{
//无显式的访问修饰符,默认为private
int Value;
};
MyStruct myStruct;
myStruct.Value = 10;
MyClass myClass;
//因为Value为private,所以这个赋值语句出错
myClass.Value = 10;
在C#中,默认权限不再是两者的区别,其默认访问权限均为private的。区别在于,struct在C#中是值类型,值类型在栈上分配内存,而class为引用类型,在托管堆上分配内存。
举例一段代码,更直观:
//C#
struct MyStruct
{
public int Value;
};
class MyClass
{
public int Value;
};
static void Main(string[] args)
{
MyStruct myStruct1 = new MyStruct();
MyStruct myStruct2 = myStruct1;
myStruct1.Value = 10;
myStruct2.Value = 20;
Console.WriteLine("myStruct1.Value = {0}", myStruct1.Value);
Console.WriteLine("myStruct2.Value = {0}", myStruct2.Value);
MyClass myClass1 = new MyClass();
MyClass myClass2 = myClass1;
myClass1.Value = 10;
myClass2.Value = 20;
Console.WriteLine("myClass1.Value = {0}", myClass1.Value);
Console.WriteLine("myClass2.Value = {0}", myClass2.Value);
}
该段代码的输出结果如下:
myStruct1.Value = 10
myStruct2.Value = 20
myClass1.Value = 20
myClass2.Value = 20
从结果中可以看出,类的"=“就相当于指针赋值,MyClass myClass2 = myClass1语句完全可以认为是将myClass1的地址赋值给myClass2,所以对myClass2的任何更改都会反映到myClass1之中。而struct的”="操作,就是简单的赋值操作,也就是将myStruct1.Value复制给myStruct2.Value而已,对myStruct2的任何操作都不会影响到myStruct1。
struct和class的"=“的区别,在C++中根本不存在。无论是struct还是class,C++中的”="都是赋值操作,也就是和C#的struct一致。
本文参考来自:https://www.cnblogs.com/wodeyitian/archive/2011/02/18/2460251.html