Mega Code Archive

 
Categories / C# Tutorial / Generic
 

Template method

/*Quote from:  Book Accelerated C# 2005     * By Trey Nash     * ISBN: 1-59059-717-6     * 432 pp.     * Published: Aug 2006     * Price: $39.99 */ using System; using System.Collections.Generic; public class MyContainer<T> : IEnumerable<T> {     public void Add( T item ) {         impl.Add( item );     }     // Converter<TInput, TOutput> is a new delegate type introduced     // in the .NET Framework that can be wired up to a method that     // knows how to convert the TInput type into a TOutput type.     public void Add<R>( MyContainer<R> otherContainer,Converter<R, T> converter ) {         foreach( R item in otherContainer ) {             impl.Add( converter(item) );         }     }     public IEnumerator<T> GetEnumerator() {         foreach( T item in impl ) {             yield return item;         }     }     System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() {         return GetEnumerator();     }     private List<T> impl = new List<T>(); } public class EntryPoint {     static void Main() {         MyContainer<long> lContainer = new MyContainer<long>();         MyContainer<int> iContainer = new MyContainer<int>();         lContainer.Add( 1 );         lContainer.Add( 2 );         iContainer.Add( 3 );         iContainer.Add( 4 );         lContainer.Add( iContainer,                         EntryPoint.IntToLongConverter );         foreach( long l in lContainer ) {             Console.WriteLine( l );         }     }     static long IntToLongConverter( int i ) {         return i;     } } 1 2 3 4