zoukankan      html  css  js  c++  java
  • 一个例子来看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();
    
            }
    

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

  • 相关阅读:
    【转】设计模式总结
    【转】并行开发
    C#开发微信公众平台-就这么简单
    (转载)MVC,MVP 和 MVVM 的图示
    插入排序
    选择排序
    VS发布 错误 未能将文件 复制到
    SqlServer 更改数据库名称
    linq查询时查询语句中附带多个查询时“已有打开的与此 Command 相关联的 DataReader,必须首先将它关闭”
    不能将 CHECK_POLICY 和 CHECK_EXPIRATION 选项设为 OFF (关)
  • 原文地址:https://www.cnblogs.com/darrenji/p/4517340.html
Copyright © 2011-2022 走看看