一、接口可以干嘛

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

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

1、实现需求方的方法

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

  1. public interface ISay
  2. {
  3. void Say();
  4. }
  5.  
  6. public class Man:ISay
  7. {
  8. public void Say()
  9. {
  10. Console.WriteLine("你好,我是男士!");
  11. }
  12. }
  13.  
  14. public class Woman : ISay
  15. {
  16. public void Say()
  17. {
  18. Console.WriteLine("你好,我是女士!");
  19. }
  20. }
  21.  
  22. public class Peole
  23. {
  24. public void Say(ISay iPeople)
  25. {
  26. iPeople.Say();
  27. }
  28. }
  29.  
  30. class Program
  31. {
  32. static void Main(string[] args)
  33. {
  34. Man man = new Man();
  35. Woman woman = new Woman();
  36. Peole peole = new Peole();
  37. peole.Say(man);
  38. peole.Say(woman);
  39. Console.ReadLine();
  40. }
  41. }

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

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

下面以两种常见构型讲解

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

  1. public interface ITransfer
  2. {
  3. void Transfer(string msg);
  4. }
  5.  
  6. public class FactoryA
  7. {
  8. public ITransfer FacATransfer = null;
  9.  
  10. public FactoryA()
  11. {
  12. product();
  13. }
  14.  
  15. public void product()
  16. {
  17. int produceNum=;
  18.  
  19. Task.Factory.StartNew(()=>
  20. {
  21. while (true)
  22. {
  23. produceNum++;
  24. FacATransfer?.Transfer(String.Format("来自FactoryA的第{0}个产品", produceNum));
  25. Thread.Sleep();
  26. }
  27. });
  28. }
  29.  
  30. }
  31.  
  32. public class FactoryB //中间商
  33. {
  34. public void ConnectInit(ITransfer transfer)
  35. {
  36. FactoryA factoryA = new FactoryA();
  37. factoryA.FacATransfer = transfer;
  38. }
  39.  
  40. }
  41.  
  42. public class FactoryC:ITransfer
  43. {
  44. public FactoryC()
  45. {
  46. FactoryB factoryB = new FactoryB();
  47. factoryB.ConnectInit(this);
  48. }
  49. public void Transfer(string msg)
  50. {
  51. Console.WriteLine("为FactoryC生产,"+msg);
  52. }
  53. }

调用

  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. FactoryC factoryC = new FactoryC();
  6. //FactoryD factoryD = new FactoryD();
  7. Console.ReadLine();
  8. }
  9. }

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

  1. public class FactoryA
  2. {
  3. public ITransfer FacATransfer = null;
  4.  
  5. public FactoryA()
  6. {
  7. product();
  8. }
  9.  
  10. public void product()
  11. {
  12. int produceNum=;
  13.  
  14. Task.Factory.StartNew(()=>
  15. {
  16. while (true)
  17. {
  18. produceNum++;
  19. FacATransfer?.Transfer(String.Format("来自FactoryA的第{0}个产品", produceNum));
  20. Thread.Sleep();
  21. }
  22. });
  23. }
  24.  
  25. }

调用:

  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. //FactoryC factoryC = new FactoryC();
  6. FactoryD factoryD = new FactoryD();
  7. Console.ReadLine();
  8. }
  9. }

学习请加qq群:568055323

C#深度学习の接口传参(interface)-----接口的妙用的更多相关文章

  1. MxNet+R︱用R语言实现深度学习(单CPU/API接口,一)

    MxNet有了亚马逊站台之后,声势大涨,加之接口多样化,又支持R语言所以一定要学一下.而且作为R语言的fans,为啥咱们R语言就不能上深度学习嘞~ -------------------------- ...

  2. 用深度学习(CNN RNN Attention)解决大规模文本分类问题 - 综述和实践

    https://zhuanlan.zhihu.com/p/25928551 近来在同时做一个应用深度学习解决淘宝商品的类目预测问题的项目,恰好硕士毕业时论文题目便是文本分类问题,趁此机会总结下文本分类 ...

  3. [转] 用深度学习(CNN RNN Attention)解决大规模文本分类问题 - 综述和实践

    转自知乎上看到的一篇很棒的文章:用深度学习(CNN RNN Attention)解决大规模文本分类问题 - 综述和实践 近来在同时做一个应用深度学习解决淘宝商品的类目预测问题的项目,恰好硕士毕业时论文 ...

  4. 深度学习框架:GPU

    深度学习框架:GPU Deep Learning Frameworks 深度学习框架通过高级编程接口为设计.训练和验证深度神经网络提供了构建块.广泛使用的深度学习框架如MXNet.PyTorch.Te ...

  5. 一个可扩展的深度学习框架的Python实现(仿keras接口)

    一个可扩展的深度学习框架的Python实现(仿keras接口) 动机 keras是一种非常优秀的深度学习框架,其具有较好的易用性,可扩展性.keras的接口设计非常优雅,使用起来非常方便.在这里,我将 ...

  6. 阶段2-新手上路\项目-移动物体监控系统\Sprint2-摄像头子系统开发\第2节-V4L2图像编程接口深度学习

    参考资料: http://www.cnblogs.com/emouse/archive/2013/03/04/2943243.htmlhttp://blog.csdn.net/eastmoon5021 ...

  7. 【神经网络与深度学习】【Matlab开发】caffe-windows使能Matlab2015b接口

    [神经网络与深度学习][Matlab开发]caffe-windows使能Matlab2015b接口 标签:[神经网络与深度学习] [Matlab开发] 主要是想全部来一次,所以使能了Matlab的接口 ...

  8. 【神经网络与深度学习】【python开发】caffe-windows使能python接口使用draw_net.py绘制网络结构图过程

    [神经网络与深度学习][python开发]caffe-windows使能python接口使用draw_net.py绘制网络结构图过程 标签:[神经网络与深度学习] [python开发] 主要是想用py ...

  9. 调参侠的末日? Auto-Keras 自动搜索深度学习模型的网络架构和超参数

    Auto-Keras 是一个开源的自动机器学习库.Auto-Keras 的终极目标是允许所有领域的只需要很少的数据科学或者机器学习背景的专家都可以很容易的使用深度学习.Auto-Keras 提供了一系 ...

随机推荐

  1. Java基础13:反射详解

    本节主要介绍Java反射的原理,使用方法以及相关的技术细节,并且介绍了关于Class类,注解等内容. 具体代码在我的GitHub中可以找到 https://github.com/h2pl/MyTech ...

  2. spring框架应用系列二:component-scan自动扫描注册装配

    component-scan自动扫描注册装配 本文系作者原创,转载请注明出处:http://www.cnblogs.com/further-further-further/p/7717331.html ...

  3. scrapy爬虫学习系列五:图片的抓取和下载

    系列文章列表: scrapy爬虫学习系列一:scrapy爬虫环境的准备:      http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_python_00 ...

  4. 图数据库项目DGraph的前世今生

    本文由云+社区发表 作者:ManishRai Jain 作者:ManishRai Jain Dgraph Labs创始人 版权声明:本文由腾讯云数据库产品团队整理,页面原始内容来自于db weekly ...

  5. 流式大数据计算实践(3)----高可用的Hadoop集群

    一.前言 1.上文中我们已经搭建好了Hadoop和Zookeeper的集群,这一文来将Hadoop集群变得高可用 2.由于Hadoop集群是主从节点的模式,如果集群中的namenode主节点挂掉,那么 ...

  6. 痞子衡嵌入式:第一本Git命令教程(2)- 连接(remote/clone)

    今天是Git系列课程第二课,上一课我们已经学会在本地创建一个空仓库,痞子衡今天要讲的是如何将本地仓库与远程建立联系. 1.将本地仓库挂上远程git remote 本地建好了仓库,我们希望能够挂到远程服 ...

  7. Linux常用命令详解(week1_day1_3)--技术流ken

    本节内容 pidofpstopipuptimewgetcurltrddtargrepfind 命令详解 1.pidof 获取正在运行程序的PID 实例1: [root@ken ~]# pidof ss ...

  8. LeetCode数组解题模板

    一.模板以及题目分类 1.头尾指针向中间逼近 ; ; while (pos1<pos2) { //判断条件 //pos更改条件 if (nums[pos1]<nums[pos2]) pos ...

  9. [前端]css前端样式的模块化

    css样式文件结构( 模块划分的单入口 ) common|_ _ _ _ _ _reset.css|_ _ _ _ _ _common.css 公用样式 libs|_ _ _ _ _ _bootstr ...

  10. 结合JDK源码看设计模式——简单工厂、工厂方法、抽象工厂

    三种工厂模式的详解: 简单工厂模式: 适用场景:工厂类负责创建的对象较少,客户端只关心传入工厂类的参数,对于如何创建对象的逻辑不关心 缺点:如果要新加产品,就需要修改工厂类的判断逻辑,违背软件设计中的 ...