/////////////////////////////////////////////////////////////////////// // GenericsDemo.cs - shows how to define and use a generic class // // // // Jim Fawcett, CSE681 - Software Modeling and Analysis, F2015 // /////////////////////////////////////////////////////////////////////// /* * A generic type has one or more type parameters that are not specified. * until a client creates an instance of the type. */ /* * Read pages 106 - 118 in Chap 3 of the class text. */ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using static System.Console; namespace CSharpDemos { public class SimpleType // T is undefined until we get to Main { private T gt; public SimpleType(T t) { gt = t; } public void say() { gt.showKindOfType(); Write("\n ToString(): {0}", gt.ToString()); } } public class EnumerableType where T : IEnumerable // a constraint { private T gt; public EnumerableType(T t) { gt = t; } public void say() { gt.showKindOfType(); foreach (U item in gt) { Write("\n ToString(): {0}", item); } } } class GenericsDemo { static void Main(string[] args) { "Testing GenericsDemo".title('='); WriteLine(); "Testing SimpleType:".title(); SimpleType sti = new SimpleType(3); sti.say(); WriteLine(); "Testing SimpleType:".title(); SimpleType std = new SimpleType(3.1415927); std.say(); WriteLine(); "Testing EnumerableType, string>:".title(); EnumerableType, string> stl = new EnumerableType, string>(new List { "one", "two", "three" }); stl.say(); Write("\n\n"); } } }