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
Most   Popular
Upcoming Events

.NET Insight

Sign up for our newsletter.

Terms and Privacy Policy consent

I agree to this site's Privacy Policy.