Construtores estático (guia de programação translation from VPE for Csharp)
Um construtor estático é usado para inicializar qualquer estático dados, ou executar uma ação específica que precisa realizada apenas uma vez.Ele é chamado automaticamente antes que a primeira instância é criada ou quaisquer membros estático são referenciados.
class SimpleClass
{
// Static variable that must be initialized at run time.
static readonly long baseline;
// Static constructor is called at most one time, before any
// instance constructor is invoked or member is accessed.
static SimpleClass()
{
baseline = DateTime.Now.Ticks;
}
}
Construtores estático têm as seguintes propriedades:
Um construtor estático não levar modificadores de acesso ou ter parâmetros.
Um construtor estático é chamado automaticamente ao inicializar o classe antes que a primeira instância seja criada ou quaisquer membros estáticos são referenciados.
Um construtor estático não pode ser chamado diretamente.
O usuário não tem controle sobre quando o construtor estático é executado no programa.
Um uso típico de construtores estático é quando a classe está usando um arquivo de log e o construtor é usado para gravar entradas para este arquivo.
Construtores estático também são úteis na criação de classes de wrapper para código não gerenciado, quando o construtor pode chamar o LoadLibrary método.
Se um construtor estático lança uma exceção, o time de execução não chamará uma segunda vez e o tipo permanecerão não inicializado durante o time de vida do domínio do aplicativo no qual o seu programa estiver sendo executado.
Exemplo
Neste exemplo, a classe Bus tem um construtor estático e um membro estático, Drive(). Quando Drive() é chamado, o estático construtor é chamado para inicializar a classe.
public class Bus
{
// static variable used by all Bus instances
// Represents the time the first bus of the day starts its route.
protected static readonly DateTime globalStartTime;
// Instance readonly variable
protected int RouteNumber { get; set; }
// Static constructor to initialize static variable.
// It is invoked before the first instance constructor is called.
static Bus()
{
globalStartTime = DateTime.Now;
Console.WriteLine("Static ctor sets global start time to {0}", globalStartTime.ToLongTimeString());
}
// Instance constructor
public Bus(int routeNum)
{
RouteNumber = routeNum;
Console.WriteLine("{0} is created.", RouteNumber);
}
// Instance method.
public void Drive()
{
TimeSpan elapsedTime = DateTime.Now - globalStartTime;
// For demonstration purposes we treat milliseconds as minutes to
// simulate actual bus times. Do not do this in your actual bus schedule program!
Console.WriteLine("{0} is starting its route {1:N2} minutes after global start time {2}.",
this.RouteNumber,
elapsedTime.TotalMilliseconds,
globalStartTime.ToShortTimeString());
}
}
class TestBus
{
static void Main()
{
Bus bus = new Bus(71);
bus.Drive();
// Wait for next bus to warm up.
System.Threading.Thread.Sleep(25);
Bus bus2 = new Bus(72);
bus2.Drive();
// Keep the console window open in debug mode.
System.Console.WriteLine("Press any key to exit.");
System.Console.ReadKey();
}
}
/* Output:
Static ctor sets global start time to 10:04:08 AM
71 is created.
71 is starting its route 21.00 minutes after global start time 10:04 AM.
72 is created.
72 is starting its route 46.00 minutes after global start time 10:04 AM.
*/
Consulte também
Conceitos
Referência
Classes e estruturas (guia de programação translation from VPE for Csharp)
Construtores (Guia de programação do C#)
Destructors (guia de programação C#)
Date |
History |
Motivo |
---|---|---|
Julho de 2008 |
Marcador adicionado re exceções no construtor estático. |
Correção de bug do conteúdo. |