博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
构造函数
阅读量:6508 次
发布时间:2019-06-24

本文共 2709 字,大约阅读时间需要 9 分钟。

hot3.png

构造函数在面试中经常出现,昨天面试有两道关于构造函数的题目,所以做一下笔记,顺便看看其他大牛对构造函数有何高见。

静态构造函数

静态构造函数具有以下特点:   

 静态构造函数自动被调用,不能被显式调用,在程序中,用户无法控制何时执行静态构造函数。 静态构造函数既没有访问修饰符,也没有参数。  一个类的静态构造函数在这个类的任何实例被创建前执行。 一个类的静态构造函数在类的任何静态成员被引用前执行。一个类的静态构造函数从不会被执行一次以上。
class Program    {        static void Main(string[] args)        {            BaseClass cla1 = new BaseClass();            BaseClass cla2 = new BaseClass();            BaseClass cla3 = new BaseClass();            BaseClass cla4 = new BaseClass();            Console.ReadKey();        }    }    class BaseClass    {        private static int callCounter;        static BaseClass()        {            Console.WriteLine("callCounter1=" + callCounter);        }        public BaseClass()        {            callCounter += 1;            Console.WriteLine("callCounter2=" + callCounter);        }    }
其结果为:

 一个类的静态构造函数在它的所有派生类的静态构造函数执行之后执行。

class Program    {        static void Main(string[] args)        {            Class cla1 = new Class();            Console.ReadKey();        }    }    class BaseClass    {        private static int callCounter;        static BaseClass()        {            Console.WriteLine("父类静态callCounter1=" + callCounter);        }        public BaseClass()        {            callCounter += 1;            Console.WriteLine("父类非静态callCounter2=" + callCounter);        }    }    class Class:BaseClass    {        private static int callCounter;        static Class()        {            Console.WriteLine("子类静态callCounter3=" + callCounter);        }        public Class()        {            callCounter += 1;            Console.WriteLine("子类非静态callCounter4=" + callCounter);        }    }
运行结果为: 

私有构造函数

私有构造方法通常用在单件模式上面,关于单件模式的运用不是本文重点,重在说明当构造方法设置为私有的话,那么该类就无法被其他类去new了,因为私有的构造方法代替了默认的构造方法,如果想在另外一个方法中得到有私有构造方法的类的话,可以封装具有私有构造方法类的方法。
class Program    {        static void Main(string[] args)        {            //Singleton singleton = new Singleton();//会报错            Singleton singleton = Singleton.GetClass();            Singleton singleton1 = Singleton.GetClass();            Console.WriteLine(singleton==singleton1);            Console.ReadKey();        }    }     class Singleton    {        private Singleton()        {}        private static Singleton singleton=null;        public static Singleton GetClass()        {            if (singleton == null)            {                Console.Write("初始化\n");                 singleton= new Singleton();            }            else            {                Console.Write("使用原来的\n");            }            return singleton;         }    }

运行结果:

 参考

    //http://www.51cto.com/art/200708/53110.htm

    //http://www.cnblogs.com/jincwfly/archive/2007/10/10/919886.html

转载于:https://my.oschina.net/u/2340182/blog/802952

你可能感兴趣的文章
APUE读书笔记-05标准输入输出库(7)
查看>>
23 第一周作业
查看>>
DNS解析偶尔延迟
查看>>
iOS打电话,发短信,发邮件,打开网址
查看>>
06-验证码-基本功能实现
查看>>
Java数据结构与算法(六) 希尔排序
查看>>
canvas学习笔记
查看>>
IntelliJ Idea下Go项目开启Debug调试
查看>>
elasticsearch安装步骤
查看>>
PHP获取Cookie模拟登录CURL(转)
查看>>
PHP-权限控制类(转)
查看>>
CSS3秘笈第三版涵盖HTML5学习笔记9~12章
查看>>
bzoj1044木棍分割
查看>>
leetcode-136-Single Number
查看>>
微信小程序笔记<五> 页面管理及生命周期(route)——getCurrentPages()
查看>>
http服务器小项目
查看>>
JS案例:Jq中的fadeOut和fadeIn实现简单轮播(没完善,简单实现)
查看>>
一些数学上的名词及操作
查看>>
C# DataGridVie利用model特性动态加载列
查看>>
IPv6 地址分类
查看>>