一个例子来看C#泛型是如何登场的

 

有这样一个有关汽车的类。

 

    public class Car
    {
        public int ID { get; set; }
        public string Make { get; set; }
    }

 

现在,在客户端创建一个Car的集合实例,再遍历。


        static void Main(string[] args)
        {
            var car1 = new Car() {ID = 1, Make = "Ford"};
            var car2 = new Car() {ID = 2, Make = "Toyota"};
            var cars = new List<Car>(){car1,car2};
            foreach (var car in cars)
            {
                Console.WriteLine(car.Make);
            }
            Console.Read();
        }

 

 

现在,要为Car增加发动机。

 

不同的车系车型可能用不同的发动机。这些发动机应该有一个基类吧。

 

    public class MotorBase
    {
        public int HorsePower { get; set; }
        public string Name { get; set; }
    }

 

比如,有2种型号的发动机,分别继承基类MotorBase。

 

    public class V8 : MotorBase
    {
        public V8(string name)
        {
            HorsePower = 300;
            Name = name;
        }
    }
    public class V9 : MotorBase
    {
        public V9(string name)
        {
            HorsePower = 350;
            Name = name;
        }
    }  

 

 

Car有可能用到V8发动机,也有可能V9发动机,这正是泛型登场的时候。

 

把Car修改成泛型类。

 

    public class Car<T>
    {
        public int ID { get; set; }
        public string Make { get; set; }
        public T Motor { get; set; }
    }    

 

这样,在创建Car<T>实例的时候,可以相对自如地选择V8或V9发动机。

 

        static void Main(string[] args)
        {
            var v8Car1 = new Car<V8>() {ID = 1, Make = "Ford",Motor = new V8("v8发动机")};
            var v8Car2 = new Car<V8>() { ID = 2, Make = "Toyota", Motor = new V8("v8发动机") };
            var v8Cars = new List<Car<V8>>
            {
                v8Car1, v8Car2
            };
            foreach (var car in v8Cars)
            {
                Console.WriteLine("品牌:{0},发动机:{1}",car.Make, car.Motor.Name);
            }
            Console.Read();
        }

 

由此,当针对不同的类型有相同行为的时候,正是泛型登场的时候。

posted @ 2015-05-20 15:50  Darren Ji  阅读(1284)  评论(1编辑  收藏  举报

我的公众号:新语新世界,欢迎关注。