A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄冉 中级黑马   /  2012-12-4 08:51  /  1082 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

如果泛型类型用out关键字标注,泛型接口就是协变的。也就是说返回类型只能为T
public class Shape
    {
        public double width{get;set;}
        public double height{get;set;}
        public override string ToString()
        {
            return String.Format("width:{0},height:{1}",width,height);
        }
    }
    public class rectangle:Shape
    {
    }
    public interface Index<out T>
    {
        T this[int index] { get; }
        int Count { get; }
    }//对接口Index使用了只读所引器。
    public class Rec : Index<rectangle>
    {
        private rectangle[] data = new rectangle[3]
        {
            new rectangle{width=5,height=3.3},
            new rectangle{width=2,height=3},
            new rectangle{width=1.1,height=1.2}
        };
        public static Rec getrec()
        {
            return new Rec();
        }
        public rectangle this[int index]
        {
            get
            {
                if (index < 0 || index > data.Length)
                    throw new ArgumentOutOfRangeException("index");
                return data[index];
            }
        }
        public int Count
        {
            get
            {
                return data.Length;
            }
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Index<rectangle> rectangles = Rec.getrec();
            Index<Shape> shapes = rectangles;
            for (int i = 0; i < shapes.Count; i++)
            {
                Console.WriteLine(shapes[i]);
            }
            Console.ReadKey();
        }
        
    }
Rec.getrec()方法返回一个实现Index<rectangle>接口的rec类,可以把返回值赋予Index<rectangle>类型的变量rectangle.接口是协变的,所以可以把返回值赋予Index<shape>类型的变量。使用shapes变量可以在for循环中使用接口的索引器和Count属性。

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马