技术开发 频道

.Net构造函数大聚会 各显神通

【IT168技术文档】

  (1)公共构造函数

  公共的构造函数是最为常见的形式,允许类被使用者实例化。C#实例如下:

class myClass { //Public Constructor public myClass(){}; }
  VB实例如下:
Class myClassClass myClass { public Sub new()sub new() end sub }
  (2)私有构造函数
 
  私有构造函数是一种特殊的实例构造函数,通常应用于只包含静态成员的类中,这些类经常作为实用类使用。
 
  如果类具有一个或多个私有构造函数而没有公共构造函数,则不允许被其他类(嵌套类除外)创建该类的实例。例如:
class myClass { private myClass(){}; public static double e = 2.71828; }
  声明空构造函数可阻止自动生成默认构造函数。注意,如果不对构造函数使用访问修饰符,则在默认情况下它仍是私有构造函数。但是,通常显示地使用private(私有)修饰符来清楚地表明该类不能被实例化。
 
  当没有实例字段或实例方法或调用方法以获得类的实例时,私有构造函数可用于阻止创建类的实例。
 
  私有函数的另一个应用场合是在单件(Singleton)模式中,是该模式实现的关键。私有函数保证类的实例只能通过该类中的静态方法实现,从而保证实例的唯一性。
 
  (3)保护构造函数
 
  受保护的构造函数使类可以被子类实例化,在大多数场合无用。但如果希望类只能被工厂实例化时,就用到了这个特性。下面是类只能被工厂实例化的例子:
 
  首先,我们使类的构造函数被声明为受保护的构造函数,即除了类和子类,都不能访问构造函数。
Using System; Namespace Staticconstructor { public class myNewClass {   protected myNewClass()   {   } } }
  这样就保证了不能直接实例化myNewClass,然后我们创建一个工厂,负责实例化这个类。
Using System; Namespace Staticconstructor { public class myFactory {   public myFactory ()   {   }   public myNewClass CreatemyNewClass()   {    return new myNewClass();   } } }
  然而代码无法通过编译,因为myNewClass的构造函数是受保护的,无法被myFactory实例化。结果是其他类无法实例化myNewClass,myFactory也不能。
 
  由于myNewClass的构造函数是受保护的,因此其子类可以实例化这个类。但我们不能将工厂类作为其子类,这样会导致耦合性。同时我们也不希望让类本身实例化自身,因为需要静态方法。

0
相关文章