前言

  前一篇浅显的述说了一下c#接口的作用,并用了一个不怎么好的例子述说了一下。时隔一天,在看完大家的评论后我在论坛中查看了很多前辈们对c#接口的描述,发现大家对例子的说明不是太容易让我们这些新人理解。接下来,就用我这个新手的角度再来阐述一遍。哈哈哈哈……

理论改编故事

  A公司在经过“百兽齐鸣”的事件后汲取了教训,老王也开始用接口这个东西来进行项目的管理。为此,他轻松了不少,沾沾自喜中也就没有去探究接口的其它作用了(没有影射大家,纯属为了编故事)。

  这天,A公司下达了一个新的需求,需要实现由某一个人带着一种动物出去遛弯。老王看到这个需求,轻哼一声:我有接口我怕谁,改接口让小的们去实现相关行为去。

  老王在接口中加了一个 void Walk(string people);下达命令,小的们,赶快实现各个动物中的行为,我要遛弯啦!哈哈哈

  大家匆匆实现好了各自动物的Walk行为后老王就开始来实现某人带动物遛弯的功能了。

  然后他写出了这种代码:

  

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace InterfaceProject
  8. {
  9. /// <summary>
  10. /// 人
  11. /// </summary>
  12. public class People
  13. {
  14. /// <summary>
  15. /// 姓名
  16. /// </summary>
  17. private string name;
  18.  
  19. public string Name
  20. {
  21. get { return name; }
  22. set { name = value; }
  23. }
  24. #region 带动物遛弯
  25. public void WalkWithAnimal(Dog dog)
  26. {
  27. dog.Walk(this.name);
  28. }
  29. public void WalkWithAnimal(Cat cat)
  30. {
  31. cat.Walk(this.name);
  32. }
  33. public void WalkWithAnimal(Pig pig)
  34. {
  35. pig.Walk(this.name);
  36. }
  37. #endregion
  38. }
  39. }

  就这样,安稳过了一段时间。突然有一天,A公司来了一批新动物分发到了各个程序员手中,大家快速的完成了各个动物类。

  这时,老王傻眼了。卧槽,这尼玛有1000多个动物,我得写1000个遛弯的东西啊!!!!!天啦!

  老王现在知道了问题所在,立马在Zenkey的博客中查找解决方案,终于,他发现了这篇文章(哈哈哈哈)

  在寻求了解决方法后,他立马改了代码又去得意去了……

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace InterfaceProject
  8. {
  9. /// <summary>
  10. /// 人
  11. /// </summary>
  12. public class People
  13. {
  14. /// <summary>
  15. /// 姓名
  16. /// </summary>
  17. private string name;
  18.  
  19. public string Name
  20. {
  21. get { return name; }
  22. set { name = value; }
  23. }
  24. public People(string name)
  25. {
  26. this.Name = name;
  27. }
  28. #region 带动物遛弯
  29. public void WalkWithAnimal(IAnimal animal)
  30. {
  31. animal.Walk(this.name);
  32. }
  33. //public void WalkWithAnimal(Dog dog)
  34. //{
  35. // dog.Walk(this.name);
  36. //}
  37. //public void WalkWithAnimal(Cat cat)
  38. //{
  39. // cat.Walk(this.name);
  40. //}
  41. //public void WalkWithAnimal(Pig pig)
  42. //{
  43. // pig.Walk(this.name);
  44. //}
  45. #endregion
  46. }
  47. }

  得意之余,带所有动物轮流遛弯去!!!

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace InterfaceProject
  8. {
  9. class Program
  10. {
  11. static void Main(string[] args)
  12. {
  13. //百兽齐鸣(这里可以使用反射来初始化所有继承IAnimal的所有动物,我就不写这个了,主要看接口)
  14. List<IAnimal> animals = new List<IAnimal>();
  15. IAnimal dog = new Dog();
  16. animals.Add(dog);
  17. IAnimal cat = new Cat();
  18. animals.Add(cat);
  19. IAnimal pig = new Pig();
  20. animals.Add(pig);
  21.  
  22. //老王王带所有动物都遛一遍
  23. People p = new People("老王");
  24. for (int i = ; i < animals.Count; i++)
  25. {
  26. p.WalkWithAnimal(animals[i]);
  27. }
  28. }
  29. }
  30. }

总结

  不知道大家根据这个故事都理解到了什么,这篇文章后我也就不再探究接口的作用了,目前在公司中用接口的这些功能已经让我轻松了不少,希望所有新手都能在我这里将接口这个神物摸索清楚。

  如果有看不明白的请结合上一篇浅谈c#接口来看。

  如果大家赞同请点赞,如果我述说的有不妥的地方希望大家海涵并指出,我们共同进步。

  

  

c#接口深入一步探究其作用,适合新人了解的更多相关文章

  1. java接口和抽象类的区别和作用(功能、用途、好处)

    Java接口: 总结了4点关于JAVA中接口存在的意义: 1.重要性:在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制.正是由于这两种机制的存在,才赋 ...

  2. 05.Hibernate常用的接口和类---Configuration类和作用

    Configuration作用: 加载Hibernate配置文件,可以获取SessionFactory对象 加载方式: 1.加载配置文件 Configuration configuration = n ...

  3. 微信公众平台接口调用第一步(获取access_token)

    最近公司需要开发微信公众号,闲着无聊就写写博客,希望能帮到你我 上代码: package test; import java.util.List; import java.util.ArrayList ...

  4. Itreatot接口实现类中modCount的作用

    modCount只有在本数据结构对应迭代器中才使用,以HashMap为例: private abstract class HashIterator implements Iterator { Entr ...

  5. 04.Hibernate常用的接口和类---SessionFactory类和作用

    是一个生成Session的工厂类 特点: 1.由Configuration通过加载配置文件创建该对象. SessionFactory factory = config.buildSessionFact ...

  6. ParentWindow属性及其一系列函数的作用——适合于那些不需要父控件管理内存释放的子控件

    TWinControl = class(TControl) property ParentWindow: HWnd read FParentWindow write SetParentWindow; ...

  7. 技术部突然宣布:JAVA开发人员全部要会接口自动化测试框架

    整理了一些Java方面的架构.面试资料(微服务.集群.分布式.中间件等),有需要的小伙伴可以关注公众号[程序员内点事],无套路自行领取 写在前边 用单元测试Junit完全可以满足日常开发自测,为什么还 ...

  8. Java 函数式接口

    目录 Java 函数式接口 1. 函数式接口 1.1 概念 1.2 格式 1.3 函数式接口的使用 2. 函数式编程 2.1 Lambda的延迟执行 性能浪费的日志案例 使用Lambda表达式的优化 ...

  9. 【java8新特性】02:常见的函数式接口

    Jdk8提供的函数式接口都在java.util.function包下,Jdk8的函数式类型的接口都有@FunctionInterface注解所标注,但实际上即使没有该注解标注的有且只有一个抽象方法的接 ...

随机推荐

  1. Unity给力插件之ShaderForge(三)

    地形模型材质: 使用Unity自带的地形会出现一些问题,所以我尽量使用手工制作的模型来制作地形.而地形又需要只使用一个材质球,于是在此制作一个简单的Shader. 效果图: 注意: 1.颜色遮罩的图片 ...

  2. 【HTML】Beginner3:ParagraphsEmphasisLine breaks

    1.Paragraphs </p>     distinct blocks of the text     Think of the HTML contents as if it were ...

  3. 字符串逆转(递归和非递归java)

    package 乒乒乓乓; public class 递归逆转字符串 {    //非递归逆转    public static String reverse(String s)    {       ...

  4. mmap的使用

    http://blog.csdn.net/adcxf/archive/2009/03/14/3989725.aspx 共 享内存可以说是最有用的进程间通信方式,也是最快的IPC形式.两个不同进程A.B ...

  5. oracle 存储过程 动态sql语句

    一.在oracle项目开发中越到问题: 在利用ODP向oracle中插入数据时,如果这样写:   insert into clobTable (id, story) values(1,'....'); ...

  6. opengl (1) 基本API的熟悉

    代码从此处下载 1 运行如下代码,可以看到如下效果,我们利用opengl画出一个三角形. void renderScene(void) { /* glClear清除缓冲区 */ glClear(GL_ ...

  7. 问题-[DelphiXE7]新建的安桌模拟器运行程序闪退

    问题现象:在DelphiXE7中的手机模拟器,每次运行程序,就闪退?问题处理:在 DelphiXE7的目录中,有一个AVD文件夹,删除后就好了.

  8. STM32F103 与 STM32F407引脚兼容问题

    ===========突袭网收集的解决方案如下=========== 解决方案1: STM32F103有的功能407都有,并且这些功能的引脚完全兼容,只是程序不同而已...而STM32F407有的功能 ...

  9. [微信小程序] 终于可以愉快的使用 async/await 啦

    [小程序] 终于可以愉快的使用 async/await 啦 这篇文章主要是想说一下 怎么在微信小程序中使用async/await从而逃离回调地狱 背景 最近一直在搞微信小程序 用的语言是TypeScr ...

  10. Test-NetConnection

    有了PowerShell 4.0,排除网络故障的日子就会轻松很多.Test-NetConnection cmdlet将多个测试整合到了一个简单的有几个参数的命令当中.例如,命令Test-NetConn ...