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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 曹伟 中级黑马   /  2013-8-30 17:04  /  1794 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

记得上次黑马的吕老师视频面试时问我“说说类和结构体的区别?”我当时想到的是“类是引用类型,结构体是值类型呗!”,就没往下说了,吕老师又问“结构体里面有构造函数吗?”,我懵了,因为很少使用结构体。今天抽空学习整理了一下,希望对论坛里面不了解的同学有所帮助!
namespace test12
{
    class ClassA
    {
        public void output()
        {
            Console.WriteLine("success");
        }
    }
    class ClassB
    {
        public ClassB(int a)
        {
            Console.WriteLine(a);
        }
        public void output()
        {
            Console.WriteLine("success");
        }
    }

    struct StructA
    {
        //StructA()   //错误,结构不能包含显式的无参数构造函数,这是结构体默认的构造函数,与类不同,这个不能重写。
        //{
        //   Console.WriteLine("success");
        //}
        public void output()
        {
            Console.WriteLine("success");
        }

    }
    struct StructB
    {
        public StructB(int a)
        {
            Console.WriteLine(a);
        }
        public void output()
        {
            Console.WriteLine("success");
        }

    }
    class Program
    {
        static void Main(string[] args)
        {
            ClassA A = new ClassA();
            A.output();
            //ClassB B = new ClassB();//错误,ClassB没有0个参数的构造函数
            //B.output();
            ClassB B = new ClassB(5);
            B.output();


            StructA SA = new StructA(); //调用结构体默认的构造函数
            SA.output();

            StructB SB = new StructB();//同类不一样,这种实例化的方式也是对的。
            SB.output();

            StructB SC = new StructB(5);//调用结构体带参的构造函数
            SC.output();

            Console.ReadKey();

            /*
              类的构造函数。
                (1)当类中没有写构造函数时,实例化类的时候会默认调用父类System.Object的无参构造函数。
                (2)当类中只写了带参的构造函数时,实例化类的时候只能调用这个重载的构造函数,而继续调用无参的构造函数会提示错误。
              结构体的构造函数
                (1)结构体中不能写无参的构造函数,只能写带参的构造函数,这同类的构造函数不一样。
                (2)在结构体中只有带参的构造函数时,可以调用无参的构造函数来实例化结构体,这个同类也不一样。
             如何选择结构还是类
            (1)堆栈的空间有限,对于大量的逻辑的对象,创建类要比创建结构好一些
            (2)结构表示如点、矩形和颜色这样的轻量对象,例如,如果声明一个含有1000个点对象的数组,则将为引用每个对象分配附加的内存。                              在此情况下,结构的成本较低。
            (3)在表现抽象和多级别的对象层次时,类是最好的选择
            (4)大多数情况下该类型只是一些数据时,结构时最佳的选择
            * */
        }
    }
}




评分

参与人数 1技术分 +1 收起 理由
赵宗荣 + 1

查看全部评分

1 个回复

正序浏览
值得学习ing!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马