// Testing the default value expressions (14.5.13) using System; class Foo { T[] t; public Foo (int n) { t = new T [n]; for (int i = 0; i < n; i++) t [i] = default (T); } public void Test () { X.Print (t [0]); } } class Bar { public void Test () { X.Print (default (X)); X.Print (default (T)); X.Print (default (S)); } } struct S { public readonly string Hello; S (string hello) { this.Hello = hello; } public override string ToString () { return String.Format ("S({0})", Hello); } } class X { public static void Print (object obj) { if (obj == null) Console.WriteLine ("NULL"); else Console.WriteLine ("OBJECT: {0} {1}", obj, obj.GetType ()); } public static void Main () { Foo a = new Foo (4); a.Test (); Bar b = new Bar (); b.Test (); Bar c = new Bar (); c.Test (); } }