c#接口深入一步探究其作用,适合新人了解
前言
前一篇浅显的述说了一下c#接口的作用,并用了一个不怎么好的例子述说了一下。时隔一天,在看完大家的评论后我在论坛中查看了很多前辈们对c#接口的描述,发现大家对例子的说明不是太容易让我们这些新人理解。接下来,就用我这个新手的角度再来阐述一遍。哈哈哈哈……
理论改编故事
A公司在经过“百兽齐鸣”的事件后汲取了教训,老王也开始用接口这个东西来进行项目的管理。为此,他轻松了不少,沾沾自喜中也就没有去探究接口的其它作用了(没有影射大家,纯属为了编故事)。
这天,A公司下达了一个新的需求,需要实现由某一个人带着一种动物出去遛弯。老王看到这个需求,轻哼一声:我有接口我怕谁,改接口让小的们去实现相关行为去。
老王在接口中加了一个 void Walk(string people);下达命令,小的们,赶快实现各个动物中的行为,我要遛弯啦!哈哈哈
大家匆匆实现好了各自动物的Walk行为后老王就开始来实现某人带动物遛弯的功能了。
然后他写出了这种代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace InterfaceProject
{
/// <summary>
/// 人
/// </summary>
public class People
{
/// <summary>
/// 姓名
/// </summary>
private string name; public string Name
{
get { return name; }
set { name = value; }
}
#region 带动物遛弯
public void WalkWithAnimal(Dog dog)
{
dog.Walk(this.name);
}
public void WalkWithAnimal(Cat cat)
{
cat.Walk(this.name);
}
public void WalkWithAnimal(Pig pig)
{
pig.Walk(this.name);
}
#endregion
}
}
就这样,安稳过了一段时间。突然有一天,A公司来了一批新动物分发到了各个程序员手中,大家快速的完成了各个动物类。
这时,老王傻眼了。卧槽,这尼玛有1000多个动物,我得写1000个遛弯的东西啊!!!!!天啦!
老王现在知道了问题所在,立马在Zenkey的博客中查找解决方案,终于,他发现了这篇文章(哈哈哈哈)
在寻求了解决方法后,他立马改了代码又去得意去了……
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace InterfaceProject
{
/// <summary>
/// 人
/// </summary>
public class People
{
/// <summary>
/// 姓名
/// </summary>
private string name; public string Name
{
get { return name; }
set { name = value; }
}
public People(string name)
{
this.Name = name;
}
#region 带动物遛弯
public void WalkWithAnimal(IAnimal animal)
{
animal.Walk(this.name);
}
//public void WalkWithAnimal(Dog dog)
//{
// dog.Walk(this.name);
//}
//public void WalkWithAnimal(Cat cat)
//{
// cat.Walk(this.name);
//}
//public void WalkWithAnimal(Pig pig)
//{
// pig.Walk(this.name);
//}
#endregion
}
}
得意之余,带所有动物轮流遛弯去!!!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace InterfaceProject
{
class Program
{
static void Main(string[] args)
{
//百兽齐鸣(这里可以使用反射来初始化所有继承IAnimal的所有动物,我就不写这个了,主要看接口)
List<IAnimal> animals = new List<IAnimal>();
IAnimal dog = new Dog();
animals.Add(dog);
IAnimal cat = new Cat();
animals.Add(cat);
IAnimal pig = new Pig();
animals.Add(pig); //老王王带所有动物都遛一遍
People p = new People("老王");
for (int i = ; i < animals.Count; i++)
{
p.WalkWithAnimal(animals[i]);
}
}
}
}
总结
不知道大家根据这个故事都理解到了什么,这篇文章后我也就不再探究接口的作用了,目前在公司中用接口的这些功能已经让我轻松了不少,希望所有新手都能在我这里将接口这个神物摸索清楚。
如果有看不明白的请结合上一篇浅谈c#接口来看。
如果大家赞同请点赞,如果我述说的有不妥的地方希望大家海涵并指出,我们共同进步。
c#接口深入一步探究其作用,适合新人了解的更多相关文章
- java接口和抽象类的区别和作用(功能、用途、好处)
Java接口: 总结了4点关于JAVA中接口存在的意义: 1.重要性:在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制.正是由于这两种机制的存在,才赋 ...
- 05.Hibernate常用的接口和类---Configuration类和作用
Configuration作用: 加载Hibernate配置文件,可以获取SessionFactory对象 加载方式: 1.加载配置文件 Configuration configuration = n ...
- 微信公众平台接口调用第一步(获取access_token)
最近公司需要开发微信公众号,闲着无聊就写写博客,希望能帮到你我 上代码: package test; import java.util.List; import java.util.ArrayList ...
- Itreatot接口实现类中modCount的作用
modCount只有在本数据结构对应迭代器中才使用,以HashMap为例: private abstract class HashIterator implements Iterator { Entr ...
- 04.Hibernate常用的接口和类---SessionFactory类和作用
是一个生成Session的工厂类 特点: 1.由Configuration通过加载配置文件创建该对象. SessionFactory factory = config.buildSessionFact ...
- ParentWindow属性及其一系列函数的作用——适合于那些不需要父控件管理内存释放的子控件
TWinControl = class(TControl) property ParentWindow: HWnd read FParentWindow write SetParentWindow; ...
- 技术部突然宣布:JAVA开发人员全部要会接口自动化测试框架
整理了一些Java方面的架构.面试资料(微服务.集群.分布式.中间件等),有需要的小伙伴可以关注公众号[程序员内点事],无套路自行领取 写在前边 用单元测试Junit完全可以满足日常开发自测,为什么还 ...
- Java 函数式接口
目录 Java 函数式接口 1. 函数式接口 1.1 概念 1.2 格式 1.3 函数式接口的使用 2. 函数式编程 2.1 Lambda的延迟执行 性能浪费的日志案例 使用Lambda表达式的优化 ...
- 【java8新特性】02:常见的函数式接口
Jdk8提供的函数式接口都在java.util.function包下,Jdk8的函数式类型的接口都有@FunctionInterface注解所标注,但实际上即使没有该注解标注的有且只有一个抽象方法的接 ...
随机推荐
- makefile 中 $@ $^ %< 使用
这篇文章介绍在LINUX下进行C语言编程所需要的基础知识.在这篇文章当中,我们将会学到以下内容: 源程序编译 Makefile的编写 程序库的链接 程序的调试 头文件和系统求助 1.源程序的编译 在L ...
- oracle dblink使用
一.dblink介绍 dblink是一个单向的数据库连接,通过设置可以访问其他数据库中的数据跟使用本地数据库中数据一样的感觉,但注意是单向的dblink.例如:A建连B的dblink,A可以访问B的表 ...
- CodeForces 361B Levko and Permutation
题意:有n个数,这些数的范围是[1,n],并且每个数都是不相同的.你需要构造一个排列,使得这个排列上的数与它所在位置的序号的最大公约数满足 > 1,并且这些数的个数恰好满足k个,输出这样的一个排 ...
- vim recording
大家是否有这种经验,“不知道为什么按出recording状态,按ESC貌似无法直接退掉”的情况,个人已经有过好几次了.与其出来烦人还不如了解它,昨天我就花了点时间学习recording.怎么说,还是有 ...
- 【Kafka入门】Kafka入门第一篇:基础概念篇
Kafka简介 Kafka是一个消息系统服务框架,它以提交日志的形式存储消息,并且消息的存储是分布式的,为了提供并行性和容错保障,消息的存储是分区冗余形式存在的. Kafka的架构 Kafka中包含以 ...
- yii 获取系统级请求参数的常用方法
1.GET/POST 1.1.获取GET/POST过来的数据 Yii::app()->request->getParam('id'); 1.2.判断数据提交方式 Yii::app()-&g ...
- Android框架结构图
- elasticsearch安装过程中的license问题解决办法
1.git clone git://github.com/mobz/elasticsearch-head.git 2.cd elasticsearch-head 3.npm install 出现下来问 ...
- jquery 模块拖拽
这是模块拖拽Javascript代码 $(function(){ var _move=false;//移动标记 var _x,_y;//鼠标离控件左上角的相对位置 $(".drag" ...
- Android之AlarmManager(全局定时器/闹钟)指定时长或以周期形式执行某项操作
1.AlarmManager,顾名思义,就是“提醒”,是Android中常用的一种系统级别的提示服务,可以实现从指定时间开始,以一个固定的间隔时间执行某项操作,所以常常与广播(Broadcast)连用 ...