• 编写高质量代码改善C#程序的157个建议——建议106:为静态类添加静态构造函数


    建议106:为静态类添加静态构造函数

    静态类可以拥有构造方法,这就是静态构造方法。静态构造方法与实例构造方法比较有几个自己的特点:

    • 只被执行一次,且在第一次调用类成员之前被运行时执行。
    • 代码无法调用它,不像实例构造方法使用new关键字就可以被执行。
    • 没有访问标识符。
    • 不能带任何参数。

     使用静态构造方法的好处是,可以初始化静态成员并捕获在这过程中发生的异常。而使用静态成员初始化器则不能在类型内部捕获异常了。查看下面代码:

            static class SampleClass
            {
                private static FileStream fileStream = File.Open(@"c:	emp.txt",FileMode.Open);
                public static void SampleMethod(){}
            }
    
            static void Main(string[] args)
            {
                SampleClass.SampleMethod();
                Console.ReadKey();
            }

     如果文件“c: emp.txt”不存在,这段代码将会抛出一个TypeInitializationException。比较理想的做法是,在类型SampleClass的内部对fileStream进行初始化。提供静态构造器的SampleClass应该如下所示:

        static class SampleClass
        {
            private static FileStream fileStream;
    
            static SampleClass()
            {
                try
                {
                    fileStream = File.Open(@"c:	emp.txt", FileMode.Open);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                    //异常处理
                }
            }
    
            public static void SampleMethod() { }
        }

    在上面的代码中,如果类型初始化不成功,会在类型的内部处理完毕,并不会将异常抛给调用者。因为有时候调用者甚至都不知道类型需要初始化什么内容,所以将初始化失败的异常处理交给上层是不合理的。

    对静态引用类型的初始化应该使用静态构造方法。但是,如果一个静态类只有值类型的变量,则可以放宽这种限制。

    转自:《编写高质量代码改善C#程序的157个建议》陆敏技

  • 相关阅读:
    Max Sum Plus Plus HDU
    Monkey and Banana HDU
    Ignatius and the Princess IV HDU
    Extended Traffic LightOJ
    Tram POJ
    Common Subsequence HDU
    最大连续子序列 HDU
    Max Sum HDU
    畅通工程再续
    River Hopscotch POJ
  • 原文地址:https://www.cnblogs.com/jesselzj/p/4748193.html
Copyright © 2020-2023  润新知