为了解决这个矛盾,要用到内部类。我们在myFactory内部创建一个私有的myNewClass的子类,然后通过该子类获得myNewClass的实例。
Using System;
Namespace Staticconstructor
{
public class myFactory
{
public myFactory ()
{
}
public myNewClass CreatemyNewClass()
{
return new mySubClass ();
}
private class mySubClass : myNewClass
{
public mySubClass():base()
}
}
}
当然,myFactory实际返回的mySubClass,而不是myNewClass,不过对客户而言并无区别。
这种方法也有缺陷,如果定义一个myNewClass的子类,即可通过该子类实现其实例化,但这种方法在实际中已经够用。
(4)静态构造函数
静态构造函数用于初始化类,在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类。静态构造函数的声明方式如下:
Using System;
Namespace Staticconstructor
{
public class myNewClass
{
static myNewClass()
{
}
}
}
静态构造函数既没有修饰符,也没有参数。它在创建第一个实例或引用任何静态成员之前将被自动初始化类,无法直接调用静态构造函数。
在程序中,用户无法控制何时执行静态构造函数。
静态构造函数的典型用途是当类使用日志文件时,将使用这种构造函数向日志文件中写入项。下面是静态构造函数的使用示例:
using System;
namespace StaticConstructor
{
public class myClass
{
public myClass()
{
System.Console.WriteLine("New Instance Created");
}
static myClass()
{
System.Console.WriteLine("This is static constructor");
}
public static void Hello()
{
System.Console.WriteLine("Hello");
}
public static void Main()
{
myClass.Hello();
myClass ms = new myClass();
System.Console.WriteLine();
}
}
}
希望大家对构造函数进行补充。