前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >确保初始化静态成员

确保初始化静态成员

作者头像
喵叔
发布2020-09-08 17:09:48
8310
发布2020-09-08 17:09:48
举报
文章被收录于专栏:喵叔's 专栏喵叔's 专栏

在开发时我们习惯在创将某个实例之前先把静态成员变量初始化好,具体做法是通过静态初始化语句以及静态构造函数。静态构造函数在 c# 是比较特殊的函数,它会在第一次访问所在类定义的其他方法、变量和属性之前执行,一般我们用它来初始化静态变量、实现单例模式以及执行其他一些需要在访问其他必要的工作。如果静态字段初始化工作较为复杂或者是初始化开销很大的话,那么我们可以使用 Lazy 机制将初始化工作推迟在第一次访问该字段的时候再去执行。 在 C# 中比较常见的静态初始化语句是实现单例模式,开发人员可以将实例级别的构造函数设为 private ,并添加静态初始化语句并在其中调用这私有的实力构造函数。我们来看一个例子,具体来看看怎么实现单例模式:

代码语言:javascript
复制
public class Demo
{
    private static readonly Demo myDemo = new Demo();
    private Demo(){}
    public static Demo MyDemo
    {
        get {return myDemo;}
    }
}

上面这段代码我们就定义了一个单例模式,加入初始化的过程比较复杂我们可以将上述代码改为如下形式:

代码语言:javascript
复制
public class Demo
{
    private static readonly Demo myDemo;
    static Demo()
    {
        myDemo=new Demo();
    }
    private Demo(){}
    public static Demo MyDemo
    {
        get {return myDemo;}
    }
}

Tip:静态字段初始化语句会先于静态构造函数执行,甚至有时会比基类的静态构造函数执行的更早。‘

  1. 注意 这里有三点在开发中需要注意:
  • 在每个类中只允许包含一个静态构造函数;
  • 在第一次访问某个类之前,CLR 会自动调用这个类的静态构造函数;
  • 在静态构造函数中应该避免将其中的异常传播到静态构造函数之外,为了防止这种情况的发生我们需要在静态构造函数中加入 try…catch 语句。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-04-12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档