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();

posted @ 2015-04-22 20:01  江境纣州  阅读(128)  评论(0编辑  收藏  举报