Capture Variables with Closures: C#: Initialize Static Fields: Listing 3

There are several different ways to initialize static fields. In most cases, the worst choice is a static constructor. Handling literals as constants provides the best performance. For values that must be calculated at runtime, just-in-time creation is often the best approach if you have the discipline to always use a property. Otherwise, using a method when calling a method to initialize the static field is usually the best approach.

public class InitializationTest
{
   public const string First ="Foo";
   public static readonly string Second = "Foo";
   public static readonly 
      ReadOnlyCollection Third = GetInitialValue();
   public static readonly ReadOnlyCollection Fourth;
   private static ReadOnlyCollection fifthBacking;

   public const int Sixth = 1;
   public static readonly int Seventh = 1;
   public static readonly int Eighth = 
      GetInitialNumericValue();
   public static readonly int Ninth;

   static InitializationTest()
   {
      Console.WriteLine("In Constructor");
      var list =  new List();
      // TODO: Fill List
      Fourth = new ReadOnlyCollection(list);
      Ninth = 1 + 1 - 1;// Simulate runtime calulation
   }

   private static ReadOnlyCollection GetInitialValue()
   {
      Console.WriteLine("In GetInitialValue");
      var list = new List() ;
      // TODO: Fill List
      return new ReadOnlyCollection(list);
   }

   private static int GetInitialNumericValue()
   {
      Console.WriteLine("In GetInitialNumericValue");
      return 1 + 1 - 1;
   }

   public static ReadOnlyCollection Fifth
   {
      get
      {
         Console.WriteLine("In Fifth");
         if (fifthBacking == null)
         {
            var list = new List();
            // TODO: Fill List
            fifthBacking = new 
               ReadOnlyCollection(list);
         }
         return fifthBacking;
      }
   }
}
comments powered by Disqus

Featured

  • Microsoft Highlights Visual Studio Live! Event Lineup and Longtime Developer Community Role

    A Microsoft MVP Blog post on Visual Studio Live!'s longevity arrives as the 2026 conference series continues with upcoming stops at Microsoft HQ, San Diego and Orlando.

  • Using Local AI to Cut Copilot Usage-Based Billing Shock

    After being gobsmacked by the new billing plan using almost all my monthly credits in one or two days, I tried pushing some Copilot-style coding work onto local models in VS Code. What I found was less "free AI" and more "pick your pain": cloud charges on one side, heavy local resource use and long waits on the other.

  • .NET 11 Preview 5 Focuses on Performance, Productivity and Safer Code

    .NET 11 Preview 5 focuses on under-the-hood runtime performance gains, streamlined APIs and language features that reduce boilerplate, plus built‑in security checks and incremental ASP.NET Core and EF Core improvements aimed at everyday developer productivity.

  • VS Code 1.124 Focuses on Agent Autonomy and Parallel Sessions

    Microsoft's June 2026 VS Code update turns on Autopilot by default and adds background sending for agent sessions.

Subscribe on YouTube