设计网站公司湖南岚鸿设计,WordPress大胡子,福建省建设厅网站施工员查询,简单网页制作过程引子#xff1a;时常会有这么一个疑惑#xff0c;抽象类和接口功能好像#xff0c;真正用起来该如何抉择呢#xff1f;#xff1f;好问题。。来看看书上怎么说的#xff08;C#7.0本质论#xff09;虽然方法可在基类中声明为抽象成员#xff0c;但是#xff01;#x… 引子时常会有这么一个疑惑抽象类和接口功能好像真正用起来该如何抉择呢好问题。。来看看书上怎么说的C#7.0本质论虽然方法可在基类中声明为抽象成员但是如果都从一个基类派生会用掉唯一的基类机会什么意思呢也就是C#的单继承特性了所以什么都往基类里面加就会显得特别臃肿且不通用。所以原则就是大共性你给我放基类小共性用接口。举个例子一个动物基类包含动物叫、动物吃放、动物睡觉 -- 这都没问题但是你给动物的基类里面加一个动物飞行虽然动物里面的鸟、鸡等都可以飞但是喵和狗你怎么飞啊所以这个加的就很不理智虽然也是个共性但是个小共性。所以这个小共性用接口实现就非常的Nice为何呢因为C#是单继承多接口啊也就是说你的狗子不会飞就不要来接触这个接口咯会飞的动物除了继承基类再加个接口就OK了。正文还是基于游戏我想到了一个场景就借这个场景来实战一下吧。场景描述1、三个人剑士、奶妈、格斗家组团刷副本2、三个人的大共性有三条移动、攻击、聊天3、奶妈的可以加团体Buff和团体回血4、格斗家可以加团体Buff5、剑士可以加自身Buff这时候呢很显然就把移动、打怪、聊天设置为基类了而剩下的则以接口出现当然至于为什么要用接口可以看上一篇关于抽象类的文章道理差不多。第一步先定义一个基类三个职业共性 public class Abstract {public abstract class AbstractAction {public abstract void Action(); }public class Move : AbstractAction {public override void Action() {// 英雄移动 Console.WriteLine(正在移动); } }public class Attack : AbstractAction {public override void Action() {// 英雄攻击 Console.WriteLine(开始打怪); } }public class Call : AbstractAction {public override void Action() {// 聊天 Console.WriteLine(Hi、妹子...); } } }第二部定义两个接口回血和加Buff interface IAddMilk {void AddMilk(); }interface IAddBuff {void AddBuff(); }第三部定义三个英雄 剑士调用加Buff接口 public class Swordsman : IAddBuff {private AbstractAction action;public Swordsman() { }public void Select(AbstractAction action) {this.action action; }public void Go() { action.Action(); }public void AddBuff() { Console.WriteLine(我只给自己加Buff); } } 格斗家调用加Buff接口 public class Fighter : IAddBuff {private AbstractAction action;public Fighter() { }public void Select(AbstractAction action) {this.action action; }public void Go() { action.Action(); }public void AddBuff() { Console.WriteLine(我给团体加Buff); } } 奶妈调用加Buff和加奶接口 public class Nanny : IAddBuff,IAddMilk {private AbstractAction action;public Nanny() { }public void Select(AbstractAction action) {this.action action; }public void Go() { action.Action(); }public void AddBuff() { Console.WriteLine(我给团体加Buff); }public void AddMilk() { Console.WriteLine(我给团体回血); } }第四部实例化三个职业并完成以下功能奶妈进图加Buff、加血、顺便和格斗家姑娘打个招呼格斗家加上团体Buff开始打怪剑士加上个人Buff开始打怪。 static void Main(string[] args) {// 实例化一个名叫小明的奶妈并进行加Buff和回血顺便还打了一声招呼 Nanny cat new Nanny(); Console.WriteLine(我是奶妈小明); cat.AddBuff(); cat.AddMilk(); cat.Select(new Call()); cat.Go(); Console.WriteLine(------------);// 实例化一个名叫小强的格斗家先加个团体Buff再攻击小怪 Console.WriteLine(我是副C小强); Fighter SmallC new Fighter(); SmallC.AddBuff(); SmallC.Select(new Attack()); SmallC.Go(); Console.WriteLine(------------);// 实例化一个主C小帅先给自己加个Buff然后打怪。 Console.WriteLine(我是主C); Swordsman xuxubaobao new Swordsman(); xuxubaobao.AddBuff(); xuxubaobao.Select(new Attack()); xuxubaobao.Go(); }实现实验代码https://github.com/TNever/Interfaceandabstract.git