A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© y494890511 高级黑马   /  2013-11-8 12:13  /  1659 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 y494890511 于 2013-11-12 08:48 编辑

什么时候用类什么时候用结构,

3 个回复

倒序浏览
当你用值类型的时候用结构,用参数类型时用类
回复 使用道具 举报
类的成员都保存在堆中,结构体的成员都保存在栈中。
因为栈的内存是有限的, 所以复杂对象建议使用类,简单对象可以使用结构体。
回复 使用道具 举报
      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()方法的体现是不相同的。

评分

参与人数 1技术分 +2 收起 理由
追溯客 + 2

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马