一、接口可以干嘛

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

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

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

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=; Task.Factory.StartNew(()=>
{
while (true)
{
produceNum++;
FacATransfer?.Transfer(String.Format("来自FactoryA的第{0}个产品", produceNum));
Thread.Sleep();
}
});
} } 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=; Task.Factory.StartNew(()=>
{
while (true)
{
produceNum++;
FacATransfer?.Transfer(String.Format("来自FactoryA的第{0}个产品", produceNum));
Thread.Sleep();
}
});
} }

调用:

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

学习请加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虚拟机【0】——目录

    发现一直在上层应用更新博客的我,突然发现也是时候同时更新一波基础知识了.然后就发现了一个点我还没有更新过,那就是Java虚拟机. 很多人在学习Java的时候都或多或少接触过一点,然后几乎有下面几种情况 ...

  2. leetcode — best-time-to-buy-and-sell-stock-ii

    /** * Source : https://oj.leetcode.com/problems/best-time-to-buy-and-sell-stock-ii/ * * * * Say you ...

  3. Java开发知识之Java类的高级特性,内部类.以及包使用.跟常量关键字

    Java开发知识之Java类的高级特性,内部类.以及包使用.跟常量关键字 一丶Java中包的机制 首先包其实就是个文件夹.作用就是管理类. Java中每次定义一个类的时候.通过Java编译之后.都会生 ...

  4. SLAM入门之视觉里程计(1):特征点的匹配

    SLAM 主要分为两个部分:前端和后端,前端也就是视觉里程计(VO),它根据相邻图像的信息粗略的估计出相机的运动,给后端提供较好的初始值.VO的实现方法可以根据是否需要提取特征分为两类:基于特征点的方 ...

  5. 深入浅出解读 Java 虚拟机的差别测试技术

    本文分享基于字节码种子生成有效.可执行的字节码文件变种,并用于 JVM 实现的差别测试.本文特别提出用于修改字节码语法的classfuzz技术和修改字节码语义的classming技术.上述变种技术系统 ...

  6. 痞子衡嵌入式:微控制器CPU性能测试基准(EEMBC-CoreMark)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是微控制器CPU性能测试基准CoreMark. 在嵌入式系统行业用于评价CPU性能指标的标准主要有三种:Dhrystone.MIPS.Co ...

  7. C#多线程编程笔记

    在开发中经常有遇到因为程序执行的时间过长,而造成程序假死的情况,这是因为我们的程序是同步执行的,当执行到需要长时间的操作时,程序就会等待当前的操作完成,从而造成程序假死.C#的异步与多线程就是为了解决 ...

  8. 从零开始学安全(三十九)●FCK编辑器解析漏洞

    fck 现在存在漏洞的本版分别是 2.4.2 ,2.4.4,2.6.6 可以在 查看版本 2.4.2 在 图片域有上传点 2.4.4 这里有几个按钮,首先是 Get Folders and Files ...

  9. C++系列总结——mutable关键字

    介绍 mutable的中文意思是易变的,是C++的一个关键字.它的作用就是允许修改被const修饰的对象的成员变量. 常用场景 什么情况下我们会使用到mutable? 一般我们会用const修饰get ...

  10. 原生JS编写兼容IE6,7,8浏览器无缝自动轮播(带按钮切换)

    项目要求页面兼容IE6,7,8等浏览器,我们可能会遇到这个轮播效果,轮播板块要求:无限循环.自动轮播和手动切换功能,每一次滚动一小格,网上有很多这类插件,例如:swiper等! 但是很多都是不兼容IE ...