思维的乐趣

Enjoy it
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

有时候,在编程时需要创建一个数据结构,这个数据结构中有数据成员有方法(或者只有数据,只有方法都可能),但这些都是比较通用的东西,不需要运行时交互或者变化,并且内容具有相关性,我希望它们是一个比较整体的块,于是,它就自然得是结构或者类,但我又不希望这个块被实例化出对象来,更不希望它被继承什么的。此时需要一种方法,就是将构造函数声明为 private 的。这样一来,不管是一个结构,还是类,都无法实例化了,那么就只能直接通过类名来访问,那要通过类名来访问,里面的需要被外界访问的那些成员变量以及成员函数必然需要是static 的。如下:

 

class   CommonFunction()

{

  private CommonFunction(){};

  static DateTime StartDate = new DateTime(2010, 06, 01);

  static string CompaneyName = "ZT Tec";

  static void PrintConfidential()

  {

    Console.WriteLine("These information are ZT Tec confidential!!!");

  }

  //........

}

 

如果我们想构造的一个类可以被实例化,但不希望被继承,可以定义sealed 类来实现,方法很简单,在类名前加 sealed 即可,如果有类继承自该类,编译时自然会报错不通过。

 

如果我们想构造一个类只用来被继承,但不希望被实例化,可以定义abstract 类来实现。

 

现在,在.NET/C#中,还可以定义这样一种类,叫static class ,这种类,也跟前面第一种时提到的情况一样:不能被实例化,不能被继承,但它有一个规则就是,其中的所有成员变量,成员方法,都必须是static 的!!!这个结果貌似跟定义了private构造函数的类完全一样,但好像定义了private构造函数的类,要灵活一些。因为毕竟一个类中,或者需要把某些步骤抽出来做成方法,供类内部的其它方法调用。而static了的话,这样就无法做。

 

其它方面我暂时还没想到有啥需要注意的地方。留待后补。