strucet和class区别
1.内存上:
class是引用类型,内存在分配在堆中,内存由垃圾回收机制回收,所以有析构函数。
struct是值类型,内存分配在栈中,但可以实现接口,struct变量使用完之后自动释放内存分配,说以没有析构函数。
2.继承上:
class支持继承自类和接口;而struct只能支继承接口。
class的基类是object,struct的的基类ValueType。
valuetype有三个方法Equals,GetHashCode,ToString
3.构造函数上:
class可以声明无参构造函数,可以声明析构函数;
而struct只能声明带参数构造函数,且不能声明析构函数。成员变量不能设置初始值,且只能也必须在构造函数中初始化
4.实例化上:
class要使用new关键字;而struct可以不使用new关键字,struct在声明时就进行了初始化过程,所有的成员变量均默认为0或null。
MyKey k1,k2; k2._a = k2._b = k1._a = k1._b = 1; if (k1.Equals(k2)) // IEquatable<MyKey> { Console.WriteLine("true1"); }
Tips:struct的Equal比较方法。参数类型是object,为了避免装箱,可以继承几口IEquatable<T> where T:struct
public struct MyKey : IEquatable<MyKey> { public int _a; public int _b; public MyKey(int a, int b) { _a = a; _b = b; } public bool Equals(MyKey other) { return _a == other._a && _b == other._b; } }
5、结构体在声明的时候就分配空间,而类在new(赋值)的时候才分配空间。
6、结构体可以 person p;
也可以Person p = new Person();