首页 > 代码库 > 泛型接口

泛型接口

泛型接口指定实参

    public sealed class Point    {        public Int32 x;        public Int32 y;        public override string ToString()        {            return "x: " + x + " y: " + y;        }    }    public class Triangle : IEnumerable<Point>    {        private Point[] m_triangle;        public Triangle(Point[] pArray)        {            m_triangle = new Point[pArray.Length];            for (Int32 i = 0; i < pArray.Length; i++)            {                m_triangle[i] = pArray[i];            }        }        public IEnumerator<Point> GetEnumerator()        {            return new TriangleEnum(m_triangle);        }        IEnumerator IEnumerable.GetEnumerator()        {            return GetEnumerator();        }    }    public sealed class TriangleEnum : IEnumerator<Point>    {        private Point[] m_vertices;        int position = -1;        public TriangleEnum(Point[] list)        {            m_vertices = list;        }        public Boolean MoveNext()        {            position++;            return position < m_vertices.Length;        }        public void Reset()        {            position = -1;        }        public Point Current        {            get            {                try                {                    return m_vertices[position];                }                catch (IndexOutOfRangeException)                {                    throw new InvalidOperationException();                }            }        }        Object IEnumerator.Current        {            get            {                return Current;            }        }        public void Dispose()        { }    }

泛型接口未指定实参

    internal sealed class ArrayEnumerable<T> : IEnumerable<T>    {        private T[] m_array;        public ArrayEnumerable(T[] list)        {            m_array = new T[list.Length];            for (Int32 i = 0; i < list.Length; i++)            {                m_array[i] = list[i];            }        }        public IEnumerator<T> GetEnumerator()        {            return new ArrayEnumerator<T>(m_array);        }        IEnumerator IEnumerable.GetEnumerator()        {            return GetEnumerator();        }    }    internal sealed class ArrayEnumerator<T> : IEnumerator<T>    {        private T[] m_array;        private Int32 m_position = -1;        public ArrayEnumerator(T[] list)        {            m_array = list;        }        public Boolean MoveNext()        {            m_position++;            return m_position < m_array.Length;        }        public void Reset()        {            m_position = -1;        }        public T Current        {            get            {                try                {                     return m_array[m_position];                }                catch (IndexOutOfRangeException)                {                    throw new InvalidOperationException();                }            }        }        Object IEnumerator.Current        {            get            {                return Current;            }        }        public void Dispose()        { }    }

 

测试代码

    class GenericInterfaceNoAssign    {        public static void Go()        {            Point[] points = new Point[7]            {                new Point(){x=110, y=220},                new Point(){x=111, y=221},                new Point(){x=112, y=222},                new Point(){x=113, y=223},                new Point(){x=114, y=224},                new Point(){x=115, y=225},                new Point(){x=116, y=226}            };            ArrayEnumerable<Point> arrayEn = new ArrayEnumerable<Point>(points);            foreach (Point p in arrayEn)            {                Console.WriteLine(p.ToString());            }        }    }    class GenericInterface    {        public static void Go()        {            Point[] points = new Point[3]            {                new Point(){x=10, y=20},                new Point(){x=11, y=21},                new Point(){x=12, y=22}            };            Triangle triangle = new Triangle(points);            foreach (Point p in points)            {                Console.WriteLine(p.ToString());            }        }    }