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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 胡元江 中级黑马   /  2013-2-24 16:09  /  1758 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

最好有代码说明下。 面向对象太难理解了

4 个回复

倒序浏览
静态构造函数用于初始化任何 静态 数据,或用于执行仅需执行一次的特定操作。 在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数。

静态构造函数具有以下特点:
    静态构造函数既没有访问修饰符,也没有参数。
    在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类。
    无法直接调用静态构造函数。
    在程序中,用户无法控制何时执行静态构造函数。
    静态构造函数的典型用途是:当类使用日志文件时,将使用这种构造函数向日志文件中写入项。
    静态构造函数在为非托管代码创建包装类时也很有用,此时该构造函数可以调用 LoadLibrary 方法。
    如果静态构造函数引发异常,运行时将不会再次调用该构造函数,并且在程序运行所在的应用程序域的生存期内,类型将保持未初始化。

嘿嘿,MSDN是个好东西,想知道啥,直接一查,就全知道了
回复 使用道具 举报
静态构造函数是C#的一个新特性,其实好像很少用到。不过当我们想初始化一些静态变量的时候就需要用到它了。这个构造函数是属于类的,而不是属于哪里实例的,就是说这个构造函数只会被执行一次。也就是在创建第一个实例或引用任何静态成员之前,由.NET自动调用。
   class SimpleClass
{
// Static constructor
static SimpleClass()
{
//
}
}

  在使用静态构造函数的时候应该注意几点:

  1、静态构造函数既没有访问修饰符,也没有参数。因为是.NET调用的,所以像public和private等修饰符就没有意义了。
  
  2、是在创建第一个类实例或任何静态成员被引用时,.NET将自动调用静态构造函数来初始化类,也就是说我们无法直接调用静态构造函数,也就无法控制什么时候执行静态构造函数了。

  3、一个类只能有一个静态构造函数。

  4、无参数的构造函数可以与静态构造函数共存。尽管参数列表相同,但一个属于类,一个属于实例,所以不会冲突。

  5、最多只运行一次。

  6、静态构造函数不可以被继承。

  7、如果没有写静态构造函数,而类中包含带有初始值设定的静态成员,那么编译器会自动生成默认的静态构造函数。
回复 使用道具 举报
.

静态构造函数

一:特点
    1:静态构造函数既没有访问修饰符,也没有参数。
    2:如果没有编写静态构造函数,而这时类中包含带有初始值设定的静态字段,那么编译器会自动生成默认的静态构造函数。
    3:在创建第一个类实例或任何静态成员被引用时,.NET将自动调用静态构造函数来初始化类,也就是说我们无法直接调用静态构造函数,也就无法控制什么时候执行静态构造函数了。
    4:如果类中包含用来开始执行的 Main 方法,则该类的静态构造函数将在调用 Main 方法之前执行。
    5:如果类中的静态字段带有初始化,则静态字段的初始化语句将在静态构造函数之前运行。
    6:一个类只能有一个静态构造函数。
    7:无参数的构造函数可以与静态构造函数共存。尽管参数列表相同,但一个属于类,一个属于实例,所以不会冲突。
    8:最多只运行一次。
    9:静态构造函数不可以被继承。

二 :需求
    1.为什么使用静态构造函数?
    类有一些静态字段和属性,需要在第一次使用类之前,从外部源中初始化这些静态字段和属性
    2.静态构造函数什么时候执行
    CLR不能确定静态构造函数什么时候执行,也不能预计不同类的静态构造函数按什么顺序执行,但可以明确的是,静态构造函数之多执行一次,即在引用类之前执行在C#中,静态构造函数通常在第一次调用类的成员之前执行
    3.静态构造函数有访问修饰符吗?
    没有。因为,C#代码从不调用它,但在加载类时,总是由,CLR调用它。对于C#来说是私有的吧
    4.静态构造函数可以有参数吗?
    不能有参数。
    5.一个类可以有多个静态构造函数吗?
    一个类只能有一个静态构造函数
    6.静态构造函数可以访问实例成员吗?
    显然不能。只能访问静态成员
    7.一个类可以同时拥有午餐的静态构造函数和实例构造函数吗?
    可以。因为,静态构造函数是在加载类时执行的,而实例构造函数是在创建实例时执行的,所以两者不会有冲突

三:示例
    class A
    {
        public static int X;
        static A()             //④   执行完后返回到③
        {
            X = B.Y + 1;
            Console.WriteLine("static   A()");
        }
    }

    class B
    {
        public static int Y = A.X + 1;       //③   调用了A的静态成员,
        //     转到A的静态构造函数---->
        static B()             //②   如果带有初始值设定项的静态字段,
        //     执行该类的静态构造函数时,
        //     先要按照文本顺序执行那些初始值设定项。
        //     转到初始值设定项---->
        {
            Console.WriteLine("static   B()");
        }
        static void Main()           //①   程序入口,
        //     如果类中包含用来开始执行的   Main   方法,
        //     该类的静态构造函数将在调用   Main   方法之前执行。
        //     转到B的静态构造函数---->
        {
            Console.WriteLine("X   =   {0},   Y   =   {1}", A.X, B.Y);//⑤   输出结果
            Console.ReadLine();
        }
    }
    执行结果:X=1;Y=2

这个说的比较清楚,我也学习了。
回复 使用道具 举报
静态构造方法在该类被第一次使用时自动调用一次,而且只调用一次。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马