当我在Asp.Net中使用XmlDOM
时,有一个这样的模式:`XmlReader reader = XmlReader.Create()“。
然后我几次遇到相同的模式。
我想知道静态构造函数和“new ClassName()”构造函数之间的区别(我不确定我是否使用正确的术语来描述我的意思)。
我不是在问XmlReader.Create()
是什么,我想学习的是为什么我会使用静态构造函数而不是?它会提供什么样的方面?我可以用静态构造函数做什么,但我不能用新的关键字构造函数。
提前致谢。
答案 0 :(得分:8)
首先,让我们按顺序获得术语。 XmlReader.Create
不是静态构造函数。它只是一个静态方法(通常)返回对象的新实例;这通常被称为“工厂方法”。 “静态构造函数”将是使用关键字static
声明的构造函数,用于初始化类的静态成员:
class MyClass {
static MyClass() { ... } // static constructor
}
现在为什么工厂方法可能更可取。可能有几个原因。
首先,构造函数(通过new
调用)总是必须提供新实例化的对象,否则抛出异常。如果有意义,工厂方法可以返回null
,或者它可以保留一些对象缓存,并且避免始终创建新对象(例如,当对象是不可变的时)。
另一个原因是,当您执行new T()
时,总是专门获得T
的实例。工厂方法可以改为创建T
的某个子类的实例,具体取决于输入参数和其他因素。在XmlReader
的情况下,这正是发生的事情 - XmlReader
本身就是abstract
,因此不会有任何实例;但是,有几个子类用于不同的目的(验证/非验证,流后端/ DOM支持等),XmlReader.Create
根据您提供给它的重载和参数选择正确的子类。
答案 1 :(得分:0)
静态构造函数用于初始化任何静态数据,或执行仅需执行一次的特定操作。在创建第一个实例或引用任何静态成员之前自动调用它.Classic构造函数用于初始化实例变量,并在每次创建对象时调用
答案 2 :(得分:0)
您可以在两个构造函数中执行相同的操作。没有区别。但是,静态构造函数在程序的生命周期中仅被称为 ONCE ,并且仅允许具有静态成员的类。它可以在使用之前初始化私有静态变量。