Разработка конструктора типов
Обновлен: Ноябрь 2007
Конструктор типа используется для инициализации статических данных в типе. Он вызывается средой CLR перед созданием экземпляров типа. Конструкторы типа являются static (Shared в Visual Basic) и не могут принимать параметры.
Следующие рекомендации помогут эффективно использовать статические конструкторы.
Конструктор следует сделать частным.
Конструктор типа, также называемый конструктором класса или статическим конструктором, используется для инициализации типа. Среда CLR вызывает конструктор типа перед созданием первого экземпляра типа или вызовом статических членов типа. Если конструктор типа не является частным, он может быть вызван кодом, находящимся за пределами среды CLR. В зависимости от операций, выполняемых в конструкторе, это может стать причиной непредвиденного поведения
Не вызывайте исключения из конструкторов типа.
Если конструктор типа вызывает исключение, тип нельзя использовать в домене приложения, в котором было вызвано исключение.
Рекомендуется инициализировать статические поля непосредственно в коде, а не явно используя статические конструкторы, так как среда CLR может оптимизировать производительность типов, которые не имеют явно определенного статического конструктора.
В следующем примере показан код, который не может быть оптимизирован.
Public Class BadStaticExample
Shared runId as Guid
Shared Sub New()
runId = Guid.NewGuid()
End Sub
' Other members...
End Class
public class BadStaticExample
{
static Guid runId;
static BadStaticExample()
{
runId = Guid.NewGuid();
}
// Other members...
}
Код в следующем примере может быть оптимизирован.
Public Class GoodStaticExample
Shared runId as Guid = Guid.NewGuid()
' Other members...
End Class
public class GoodStaticExample
{
static Guid runId = Guid.NewGuid();
// Other members...
}
Фрагменты — © Корпорация Майкрософт (Microsoft Corp.), 2005. Все права защищены.
Фрагменты — © Addison-Wesley Corporation. Все права защищены.
Дополнительные сведения о рекомендациях по разработке см. в книге "Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries", Krzysztof Cwalina and Brad Abrams, Addison-Wesley, 2005.