2021-06-27-刘铁猛C#语言入门详解-学习笔记P29接口隔离原则、反射、特性、依赖注入

P29接口隔离原则、反射、特性、依赖注入

回溯记录:
2021/12/28回溯

一、P29内容总结

  1. 接口隔离原则、单一职责原则
  2. 反射与依赖注入

二、接口隔离原则、单一职责原则

  1. 接口隔离原则(SOLID中的I):
    站在调用者的角度,把本质不同的功能隔离开,再用接口封装起来。
  2. 单一职责原则(SOLID中的S):
    站在服务提供者角度,一个类只做一件或一组相关的事
  3. 实例
    例一、驾驶员开小车、货车、坦克
    例二、
    例三、显示接口实现:举例“杀手”与“暖男”
例二:驾驶员既要会开小车、货车还会开坦克
using System;

namespace ConsoleApp3
{
    class Program
    {
        static void Main(string[] args)
        {
        	Car car = new Car();
            Driver driver = new Driver(car);
            //Driver driver = new Driver(new Car());
            driver.Drive();
        } 
    }

    class Driver
    {
        private IVehicle _vehicle;
        public Driver(IVehicle vehicle) 
        {
            _vehicle = vehicle;
        }
        public void Drive()
        {
            _vehicle.Run();
        }
    }

    interface IVehicle
    {
        void Run();
    }

    class Car : IVehicle
    {
        public void Run()
        {
            Console.WriteLine("Car is running");
        }
    }

    class Truck : IVehicle
    {
        public void Run()
        {
            Console.WriteLine("Truck is running");
        }
    }
    
    interface IWopean
    {
        void Fire();
    }
    
    interface ITank:IVehicle,IWopean{ 
    }

    class LightTank : ITank
    {
        public void Fire()
        {
            Console.WriteLine("Booming");
        }

        public void Run()
        {
            Console.WriteLine("KU");
        }
    }

    class MediumTank : ITank
    {
        public void Fire()
        {
            Console.WriteLine("Booming!");
        }
        
        public void Run()
        {
            Console.WriteLine("KUKU");
        }
    }

    class HeavyTank : ITank
    {
        public void Fire()
        {
            Console.WriteLine("Booming!!");
        }
        
        public void Run()
        {
            Console.WriteLine("KUKUKU");
        }
    }
}
例三:“杀手”与“暖男”
using System;
using System.Reflection;
using Microsoft.Extensions.DependencyInjection;

namespace ConsoleApp1
{

    class Program
    {
        static void Main(string[] args)
        {
            //new 一个WarmKiller对象,只有love方法可见
            WarmKiller sc = new WarmKiller();
            sc.love();
            //new 一个IGenterman对象,只有love方法可见
            IGenterman genterman = new WarmKiller();
            genterman.love();
            //new 一个IKiller对象,只有kill方法可见
            IKiller killer = new WarmKiller();
            killer.kill();
        }
    }
    interface IGenterman
    {
        void love();
    }
    interface IKiller
    {
        void kill();
    }
    class WarmKiller : IGenterman, IKiller
    {
        public void love()
        {
            Console.WriteLine("love");
        }

        void IKiller.kill()
        {
            Console.WriteLine("kill");
        }
    }
}

三、反射与依赖注入

  1. 反射
  2. 反射与接口的结合
  3. 反射与特性的结合
  4. 封装好的反射最重要的功能:依赖注入
  5. 依赖注入:
    依赖注入是依赖反射原则DIP的一个应用;
    不用静态创建类的实例,只关注用了哪种接口和哪种类就可以获取类的成员
  6. 实例
    //实例:婴儿车上有很多动物图形,点击能够发出动物叫声
    //在婴儿车上预留接口,使第三方可以对动物叫声进行添加
    //part1 读取Animal文档,使用反射调用
    //part2 实现Animal对象和Voice方法

你可能感兴趣的:(刘铁猛C#语言入门详解,c#)