关于静态构造函数,及相关问题

前言:

   谈起构造函数,从C++开始,就开始接触了。然而前几天见到C#中的静态构造函数问题,还是感觉相对陌生,遂再来看一看。

 

解析:

   先看代码,演示构造函数的使用情况:

    // Description: 演示静态构造函数的相关

    
// CopyRight: http://www.cnblogs.com/yangmingming

    
// Notes: 用一具体实例演示之

    
public class A
    {
        
public static int a;
         
static A()
        {
            a
++;
        }
        
public A()
        {
            a
++;
        }
    }
    
class Program
    {
        
static void Main(string[] args)
        {
            A a 
= new A();
            A a2 
= new A();
            Console.WriteLine(
"The value of static a is {0}",A.a );
        }
    }


  对于调试结果,居然为:

 

  为什么呢?中间肯定有问题,或者所不曾清晰地规律。原来问题在于 静态构造函数 上。

 

解析:

    原来静态构造函数,只在加载类时执行一次,即使实例化多个对象,其也至多执行一次,且是在实例化对象,或类使用其中成员前执行。见下述代码:(由前述代码,稍微修改)

 

    // Description: 演示静态构造函数的相关

    
// CopyRight: http://www.cnblogs.com/yangmingming

    
// Notes: 用一具体实例演示之

    
public class A
    {
        
         
static A()
        {
            Console.WriteLine(
"Static A");
        }
        
public A()
        {
            Console.WriteLine(
"Public A");
        }
    }
    
class Program
    {
        
static void Main(string[] args)
        {
            A a 
= new A();
            A a2 
= new A();
            
        }
    }


  而结果为:

 

  即验证了上述的解释。然而对于静态构造函数,还有几点需要说明,见附:

 

附:

  • 静态构造函数,是无参函数,且一个类也只能有一个静态构造函数,因为静态构造函数只能访问类的静态成员,而不能访问实例成员;
  • 静态构造函数,没有访问修饰符,因为C#从来不会调用它,即加上private或者public是没有意义的;
综述之,通过对静态构造函数的相关应用,加深了对这一特殊构造函数的理解,也理解了其功效。呵呵~ 

 

 

posted @ 2010-04-01 23:40  Youngman  阅读(319)  评论(0编辑  收藏  举报