C#深度学习の接口传参(interface)-----接口的妙用

一、接口可以干嘛

       我们知道,接口的本质是一个约束规范,委托是方法纵向(形式上)的封装,接口是不同方法横向(广度)的封装

接口中不能有变量,但是可以有属性方法。常见的,我们可以用接口:

1、实现需求方的方法

2、接口作为参数,实现对不同类的解耦,下面是常见的男女类

复制代码
    public interface ISay
    {
        void Say();
    }

    public class Man:ISay
    {
        public void Say()
        {
            Console.WriteLine("你好,我是男士!");
        }
    }

    public class Woman : ISay
    {
        public void Say()
        {
            Console.WriteLine("你好,我是女士!");
        }
    }

    public class Peole
    {
        public void Say(ISay iPeople)
        {
            iPeople.Say();
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Man man = new Man();
            Woman woman = new Woman();
            Peole peole = new Peole();
            peole.Say(man);
            peole.Say(woman);
            Console.ReadLine();
        }
    }
View Code
复制代码

3、接口作返回值,返回一个实现了接口的对象,基本和上面的例子类似

二、接口可以传参(常用来做对外SDK)

下面以两种常见构型讲解

1、A工厂生产产品,B工厂代理,C工厂卖,于是我们:

复制代码
    public interface ITransfer
    {
        void Transfer(string msg);
    }

    public class FactoryA
    {
        public ITransfer FacATransfer = null;

        public FactoryA()
        {
            product();
        }

        public void product()
        {
            int produceNum=0;
   
            Task.Factory.StartNew(()=> 
            {
                while (true)
                {
                    produceNum++;
                    FacATransfer?.Transfer(String.Format("来自FactoryA的第{0}个产品", produceNum));
                    Thread.Sleep(2000);
                }
            });
        }

    }

    public class FactoryB //中间商
    {
        public void ConnectInit(ITransfer transfer)
        {
            FactoryA factoryA = new FactoryA();
            factoryA.FacATransfer = transfer;
        }

    }

    public class FactoryC:ITransfer
    {
        public FactoryC()
        {
            FactoryB factoryB = new FactoryB();
            factoryB.ConnectInit(this);
        }
        public void Transfer(string msg)
        {
            Console.WriteLine("为FactoryC生产,"+msg);
        }
    }
复制代码

调用

复制代码
    class Program
    {
        static void Main(string[] args)
        {
            FactoryC factoryC = new FactoryC();
            //FactoryD factoryD = new FactoryD();
            Console.ReadLine();
        }
    }
复制代码

2、工厂A生产,D直接代理

复制代码
    public class FactoryA
    {
        public ITransfer FacATransfer = null;

        public FactoryA()
        {
            product();
        }

        public void product()
        {
            int produceNum=0;
   
            Task.Factory.StartNew(()=> 
            {
                while (true)
                {
                    produceNum++;
                    FacATransfer?.Transfer(String.Format("来自FactoryA的第{0}个产品", produceNum));
                    Thread.Sleep(2000);
                }
            });
        }

    }
复制代码

调用:

复制代码
    class Program
    {
        static void Main(string[] args)
        {
            //FactoryC factoryC = new FactoryC();
            FactoryD factoryD = new FactoryD();
            Console.ReadLine();
        }
    }
复制代码

学习请加qq群:568055323

 

posted @   卖雨伞的小男孩  阅读(1187)  评论(1编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
点击右上角即可分享
微信分享提示