欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#静态构造函数用法实例分析

程序员文章站 2023-11-17 13:54:22
本文实例讲述了c#静态构造函数用法。分享给大家供大家参考。具体如下: 当我们想初始化一些静态变量的时候,就需要用到静态构造函数了。这个静态构造函数属于类,而不属于实例,就...

本文实例讲述了c#静态构造函数用法。分享给大家供大家参考。具体如下:

当我们想初始化一些静态变量的时候,就需要用到静态构造函数了。这个静态构造函数属于类,而不属于实例,就是说这个构造函数只会被执行一次,即:在创建第一个实例或引用任何静态成员之前,由.net自动调用。

现在碰到这样一个场景:提供一个静态方法,这个静态方法在不同的地方使用,涉及到一个参数值不同,而其他内容都完全一致。如果是将静态方法的内容复制出来做成另外一个方法,代码冗余太多,做法不可取。使用静态构造函数处理静态变量,则可以尽最大程度简化代码。如下示例:

/// <summary>
/// 基类
/// </summary>
public class a
{
  public static string field = "original-test";
  //静态构造函数
  static a()
  {
    field = "test-a";
  }
  public static void test()
  {
    console.writeline("the output is : " + field);
  }
}
/// <summary>
/// 子类
/// </summary>
public class b : a
{
  //静态构造函数
  static b()
  {
    field = "test-b";
  }
  public static new void test()
  {
    a.test();
    //调用基类方法,这个对基类test函数的覆盖很重要,没有这个,那么调用b.test()的时候其实是调用基类的test方法。
  }
}

如代码所示,类型b继承于基类型a。b中的静态构造函数对静态变量field进行赋值,这个会在调用子类中的test方法之前调用,而b中test方法的实现则是完全调用基类a的test方法,这样,在方法执行的时候,方法中使用的静态变量field的值就是在b的静态构造函数中赋值之后的test-b。

调用结果如下:

static void main(string[] args)
{
  a.test();//输出the output is : test-a
  b.test();//输出the output is : test-b
  console.readline();
}

a.test()调用,field值为test-a;而b.test()调用,field值为test-b。

这样,当静态方法的实现逻辑复杂的时候,就可以针对需要将这个方法进行个性化实现的需求的时候简化代码:子类在静态构造函数中对静态变量重新赋值,然后重新实现基类中的静态方法。

(注意,后面的重新实现基类中的静态方法是必须的,否则输出b.test()的时候,调用基类的test()方法,使用的field变量则是基类中的变量,那时输出则变成如下:)

static void main(string[] args)
{
  a.test();//输出the output is : test-a
  b.test();//输出the output is : test-a。
  //因为没有覆盖子类方法,等同于a.test()
  console.readline();
}

希望本文所述对大家的c#程序设计有所帮助。