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();
    
            }
    

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

  • 相关阅读:
    angular9的学习(十)
    本周学习总结
    本周学习总结
    angular9的学习(九)
    本周学习总结
    Web地图呈现原理
    小程序Canvas性能优化实战
    地图SDK全新版本v4.3.0上线
    硬核干货来了!手把手教你实现热力图!
    地图SDK全面升级 – 数十项新功能及优化等你来体验
  • 原文地址:https://www.cnblogs.com/darrenji/p/4517340.html
Copyright © 2011-2022 走看看