先来看看微软官方对接口的定义与说明。
对于这种官方的文档,我相信大部分都看得头大,看了一遍,等于没看,这也就是学习新知识的一个正常现象。
那么我来通俗来讲讲我的个人理解:
1,所谓接口,某种意义上来说也就是类似客户和供应商直接的一个合同约定,客户在用的时候按照约定内容来使用,供应商来按照约定的内容来提供;这样依赖大大降低了程序的耦合性,所谓“耦合性”,就是指的程序内部相互勾连的部分多少,多就是耦合性高,相互依赖性强;反之,及时低耦合性。
2,接口可以 作为字段成员;
3, 接口可以继承自其他接口,并且可以多继承;
4, 接口可以让类继承自它,然后类体必须对接口进行实现:换成人话就是,接口里有个空的特殊方法,这个特殊方法不可以单独执行,现在既然有类继承于这个接口,那么编译器就要求次类必须来把这个方法写完整,方法名必须一模一样;
5、还有其他的,我暂时编不下了。。。。
这么多也基本够用;
啰啰嗦嗦这么多,不如咱们来
举一个人来钓鱼的场景吧!
这里涉及到2个类:
1. 钓鱼人:FisherMan
2. 鱼竿——手竿:HandRod
先看不用接口的情况,强依赖。
namespace FisherMan
{
class Program
{
static void Main(string[] args)
{
FisherMan fisherMan = new FisherMan(new HandRod());
fisherMan.GoFish();
Console.ReadLine();
}
}
class FisherMan
{
HandRod _handRod;//类的字段
public FisherMan(HandRod handRod)//构造函数,钓鱼人得有个钓鱼竿吧
{
_handRod = handRod;
}
public void GoFish() {//钓鱼人的方法
Console.WriteLine(_handRod.Fish()+"今天,我跋山涉水去钓鱼。");
}
}
class HandRod
{
public string Fish() {
return "我用手竿,最多抛出去20米。";
}
}
}
运行结果:
接下来,使用接口:
假设现在要有有个 一个 海杆儿,怎么办?我在增加一个 海杆儿 类,再在Main主程序里修改调用海杆儿的示例。虽然这样也没毛病,能实现,但会返现我不急要改类体,还要改调用的地方;违反类的封闭原则。
此时我们引入类的接口,创建一个接口,这个接口最为FisherMan的字段声明;HandRod 和 SeaRod 两个类均作为这个接口的实现;
上代码,注意里面的注释:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FisherMan
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("第一种:");
FisherMan fisherMan = new FisherMan(new HandRod());
fisherMan.GoFish();
Console.WriteLine("第二种:");
fisherMan = new FisherMan(new SeaRod());
fisherMan.GoFish();
Console.WriteLine("\r\n\r\n可以观察到以上两种情况下,我们都无须修改类体代码,实现了解耦!");
Console.ReadLine();
}
}
interface IRod
{
string Fish();
}
class FisherMan
{
IRod _Rod;//类的字段,接口类型
public FisherMan(IRod Rod)//构造函数,钓鱼人得有个钓鱼竿吧,此处用接口类型作为方法签名
{
_Rod =Rod;
}
public void GoFish() {//钓鱼人的方法
Console.WriteLine(_Rod.Fish()+"今天,我跋山涉水去钓鱼。");
}
}
class HandRod:IRod
{
public string Fish() {
return "我用手竿,最多抛出去20米。";
}
}
class SeaRod : IRod
{
public string Fish()
{
return "我用海杆儿,最多抛出去100米。";
}
}
}
运行结果:
好了,先说到这里吧。小伙伴们,Get到了Interface 的魅力了吗?
欢迎留言与评论...
标签:HandRod,Console,C#,接口,class,FisherMan,public From: https://www.cnblogs.com/StephenYoung/p/17823811.html