zoukankan      html  css  js  c++  java
  • 反射与依赖注入

    反射(松耦合-以不变应万变)

    不用new 操作符都能创建同类型的对象,访问对象的各个成员,有new操作符是有类型依赖的。
    程序在运行时处于动态,不能随便改变类型,但是不清楚用户可能的操作,所以让程序在静态时就做好准备,但是又不是枚举每种类型。

    using System;
    using System.Reflection;
    
    namespace Driver_core
    {
        internal class Program
        {
            public static void Main(string[] args)
            {
                ITank tank=new LightTank(); 
                //不用静态类型
                var t=tank.GetType();//得到运行时动态类型的描述信息
                object o= Activator.CreateInstance(t);
                MethodInfo fire = t.GetMethod("Fire");
                MethodInfo run = t.GetMethod("Run");
                fire.Invoke(o, null);
                run.Invoke(o, null);
            }
        }
    
    
        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 runnning!");
            }
        }
    
        class Truck:IVehicle
        {
            public void Run()
            {
                Console.WriteLine("truck is running!");
            }
        }
    
        interface ITank
        {
            void Fire();
            void Run();
        }
    
        class LightTank:ITank
        {
            public void Fire()
            {
                Console.WriteLine("开炮");
            }
    
            public void Run()
            {
                Console.WriteLine("ka……ka……ka");
            }
        }
    }
    

    反射与接口的集合

    反射与特性的集合

    依赖注入

    封装好的反射。
    引入denpendinjection 依赖

    using System;
    using System.Reflection;
    using Microsoft.Extensions.DependencyInjection;
    
    namespace Driver_core
    {
        internal class Program
        {
            public static void Main(string[] args)
            {
               var sc=new ServiceCollection();//服务提供者(容器)
               sc.AddScoped(typeof(ITank),typeof(LightTank));//基接口动态类型描述,实现的类的类型
               var sp = sc.BuildServiceProvider();
               //从容器里去调用对象
               ITank tank = sp.GetService<ITank>();
               tank.Fire();
               tank.Run();
            }
        }
    
    
        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 runnning!");
            }
        }
    
        class Truck:IVehicle
        {
            public void Run()
            {
                Console.WriteLine("truck is running!");
            }
        }
    
        interface ITank
        {
            void Fire();
            void Run();
        }
    
        class LightTank:ITank
        {
            public void Fire()
            {
                Console.WriteLine("开炮");
            }
    
            public void Run()
            {
                Console.WriteLine("ka……ka……ka");
            }
        }
    }
    
  • 相关阅读:
    决策树
    Linux登录指令-ssh
    CentOS下搭建Hive
    server 2008 ftp 环境重点说明
    搭建ftp环境
    supesite 连 discuz 论坛记录
    安装ucenter 步骤详解及supesite 安装详解
    最近打算 学点东西,不能 再这样下去了
    今天知道了一个 反向代理,是apache 的一个功能,这里记录一下
    最近 弄了一个 discuz 7.2,管理员发帖 会出现 很多错误,解决 办法 在别的帖子中找到了
  • 原文地址:https://www.cnblogs.com/lpxspring/p/12461539.html
Copyright © 2011-2022 走看看