确保初始化静态成员

简介: 确保初始化静态成员

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


在 C# 中比较常见的静态初始化语句是实现单例模式,开发人员可以将实例级别的构造函数设为 private ,并添加静态初始化语句并在其中调用这私有的实力构造函数。我们来看一个例子,具体来看看怎么实现单例模式:

public class Demo
{
    private static readonly Demo myDemo = new Demo();
    private Demo(){}
    public static Demo MyDemo
    {
        get {return myDemo;}
    }
}

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

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 语句。


目录
相关文章
|
3月前
|
安全 Java 测试技术
如何避免静态变量初始化中的异常
在Java中,静态变量初始化时可能会遇到异常。为避免此类问题,可以采取以下措施:1. 使用静态代码块进行初始化;2. 确保初始化逻辑简单且安全;3. 捕获并处理可能的异常。这些方法能有效提高程序的健壯性和稳定性。
83 15
|
8月前
|
C++
友元是一种允许某些外部函数或类访问另一个类的成员的机制
友元是C++中的一个强大特性,它提供了一种机制来允许特定的外部函数或类访问私有和保护成员。正确使用友元可以增强程序的功能性和灵活性,但应谨慎使用以避免破坏封装性和增加代码的复杂度。在设计类和功能时,合理利用友元,可以使得C++程序更加有效和高效。
61 2
|
9月前
|
编译器 数据安全/隐私保护 C++
【类与对象】封装&对象的初始化及清理
【类与对象】封装&对象的初始化及清理
|
9月前
|
安全 编译器 C++
C++类与对象【对象的初始化和清理】
C++类与对象【对象的初始化和清理】
C#中声明、初始化和实例化
C#中声明、初始化和实例化
122 0
|
Java 编译器 C++
C++冷知识:构造函数初始化时,为什么使用 : 而不是使用作用域内初始化对象?
在这个例子中,初始化列表中的成员变量顺序与类定义中的顺序不一致,可能会导致未定义的行为。 如果成员变量是const或引用类型,必须在初始化列表中进行初始化,否则会导致编译错误。
85 0
|
设计模式
单子设计模式 (对创建初始对象为静态,构造函数私有,返回值为对象的创建函数,private应用)
单子设计模式 (对创建初始对象为静态,构造函数私有,返回值为对象的创建函数,private应用)
单子设计模式 (对创建初始对象为静态,构造函数私有,返回值为对象的创建函数,private应用)
|
Java 程序员 开发者
类的加载、连接和初始化
类的加载、连接和初始化
|
安全 编译器 C++
C++对象的初始化和清理之构造函数和析构函数分析与实例(一)
对象的初始化和清理 • 生活中我们买的电子产品都基本会有出厂设置,在某一天我们不用时候也会删除一些自己信息数据保证安全 • C++中的面向对象来源于生活,每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。 构造函数和析构函数 对象的初始化和清理也是两个非常重要的安全问题 一个对象或者变量没有初始状态,对其使用后果是未知
381 0
C++对象的初始化和清理之构造函数和析构函数分析与实例(一)