黑马程序员技术交流社区

标题: 类和结构的区别 [打印本页]

作者: y494890511    时间: 2013-11-8 12:13
标题: 类和结构的区别
本帖最后由 y494890511 于 2013-11-12 08:48 编辑

什么时候用类什么时候用结构,
作者: 陈福军    时间: 2013-11-8 12:49
当你用值类型的时候用结构,用参数类型时用类
作者: hourglass    时间: 2013-11-8 12:58
类的成员都保存在堆中,结构体的成员都保存在栈中。
因为栈的内存是有限的, 所以复杂对象建议使用类,简单对象可以使用结构体。
作者: dashanren    时间: 2013-11-8 15:20
      1、结构是值类型,类则是引用类型。因此前者是放在栈(Stack)里,后者则仅仅是将引用地址存放在栈里,而具体的值则存放在堆(heap)里。
      2、据第1点可以得出结论,那就是类对象通常用来传递大数据,而结构对象则用来传递小数据。
      3、类可以被继承,而结构则不支持。
      4、结构对象不能像类对象一样赋值为null。
      5、结构不能像类一样定义析构器。
      6、结构不能像类一样定义为抽象的。
      7、在结构中不能重写方法,除非是object类型的如下方法:
           Equals()  GetHashCode()   GetType()   ToString()
          若要让结构具有多态特性,可以让其实现接口。
      8、在类中定义的事件是线程安全的,而结构则不是。
      9、结构总是具有一个默认的公共无参构造函数,但去不能像类一样定义私有的无参构造函数:
      struct Me
      {
        private Me() // compile-time error
        {
        }
    }
     
    class Me
    {
        private Me() // runs Ok{
    }
      10、类中的静态构造函数会被调用,而结构却不能。因此在结构中定义的静态构造函数,虽然可以编译       通过,但却没有价值:
    struct myStructure
    {
        static myStructure()
        {
            Console.WriteLine("This is me a structure");
         }
    }
    class myClass
    {
        static myClass()
        {
            Console.WriteLine("This is me a class");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
           myStructure s = new myStructure();//Nothing happen
           myClass c = new myClass();//Will out put This is me a class
           Console.Read();
        }
    }
      11、结构不能像类一样定义volatile字段。volatile字段主要用于并发,它相当于方法体的lock。
      12、可以对结构类型使用sizeof,对类则不行。
      13、类的字段会被自动初始化为0/false/null,而结构则不能。
      14、在结构中不能直接对字段初始化,而类则可以。
    struct myStructure
    {
        public string x = 2;//Not allowed
    }
    class myClass
    {
        public string x = 2; //Allowed
    }
        15、结构和类对于System.Object.Equals()方法的体现是不相同的。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2