猿问
下载APP

我怎么知道何时创建界面?

我怎么知道何时创建界面?

我正处于开发学习的某个阶段,我觉得我必须更多地了解接口。

我经常阅读它们,但似乎我无法掌握它们。

我已经阅读过这样的例子:动物基类,IAnimal界面,如'Walk','Run','GetLegs'等等 - 但我从来没有做过某些事情,感觉就像“嘿我应该使用界面这里!”

我错过了什么?为什么我要掌握这么难的概念!我只是因为我可能没有意识到对一个人的具体需求而感到恐惧 - 主要是因为他们理解它们时缺少一些方面!这让我觉得自己在成为开发者方面缺少一些东西!如果有人有过这样的经历并取得了突破,我会很感激如何理解这个概念。谢谢。


FFIVE
浏览 44回答 3
3回答

HUWWW

它解决了这个具体问题:你有4种不同类型的a,b,c,d。在你的代码中你有类似的东西:a.Process();b.Process();c.Process();d.Process();为什么不让它们实现IProcessable,然后呢List<IProcessable>&nbsp;list;foreach(IProcessable&nbsp;p&nbsp;in&nbsp;list) &nbsp;&nbsp;&nbsp;&nbsp;p.Process();当你添加50种类型的类都会做同样的事情时,这会扩展得更好。另一个具体问题:你有没有看过System.Linq.Enumerable?它定义了大量的扩展方法,它们可以在任何实现IEnumerable的类型上运行。因为实现IEnumerable的任何东西基本上都说“我支持无序foreach类型模式中的迭代”,所以您可以为任何可枚举类型定义复杂行为(Count,Max,Where,Select等)。

守候你守候我

假设您想要模拟在您尝试入睡时可能发生的烦恼。接口前的模型class&nbsp;Mosquito&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;flyAroundYourHead(){}}class&nbsp;Neighbour{ &nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;startScreaming(){}}class&nbsp;LampJustOutsideYourWindow(){ &nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;shineJustThroughYourWindow()&nbsp;{}}正如你清楚地看到,当你试图睡觉时,很多“事情”会令人讨厌。没有接口的类的用法但是当谈到使用这些类时,我们遇到了问题。他们没有任何共同之处。您必须单独调用每个方法。class&nbsp;TestAnnoyingThings{ &nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;testAnnoyingThinks(Mosquito&nbsp;mosquito,&nbsp;Neighbour&nbsp;neighbour,&nbsp;LampJustOutsideYourWindow&nbsp;lamp){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(mosquito&nbsp;!=&nbsp;null){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mosquito.flyAroundYourHead(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(neighbour!=&nbsp;null){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;neighbour.startScreaming(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(lamp!=&nbsp;null){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lamp.shineJustThroughYourWindow(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;}}带接口的模型为了克服这个问题,我们可以引入一个接口interface&nbsp;Annoying{ &nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;annoy();}并在类中实现它class&nbsp;Mosquito&nbsp;implements&nbsp;Annoying&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;flyAroundYourHead(){} &nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;annoy(){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flyAroundYourHead(); &nbsp;&nbsp;&nbsp;&nbsp;}}class&nbsp;Neighbour&nbsp;implements&nbsp;Annoying{ &nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;startScreaming(){} &nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;annoy(){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;startScreaming(); &nbsp;&nbsp;&nbsp;&nbsp;}}class&nbsp;LampJustOutsideYourWindow&nbsp;implements&nbsp;Annoying{ &nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;shineJustThroughYourWindow()&nbsp;{} &nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;annoy(){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;shineJustThroughYourWindow(); &nbsp;&nbsp;&nbsp;&nbsp;}}用于接口这将使这些类的使用更容易class&nbsp;TestAnnoyingThings{ &nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;testAnnoyingThinks(Annoying&nbsp;annoying){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;annoying.annoy(); &nbsp;&nbsp;&nbsp;&nbsp;}}

九州编程

使用界面有很多目的。用于多态行为。您希望使用具有对子类的引用的接口调用子类的特定方法的位置。与类签订合同以实现必要的所有方法,就像最常见的用途是COM对象,其中在继承接口的DLL上生成包装类;&nbsp;这些方法在幕后调用,你只需要实现它们,但结构与COM DLL中定义的结构相同,只能通过它们公开的接口知道。通过在类中加载特定方法来减少内存使用量。就像你有三个业务对象并且它们是在一个类中实现一样,你可以使用三个接口。例如IUser,IOrder,IOrderItempublic&nbsp;interface&nbsp;IUser(){void&nbsp;AddUser(string&nbsp;name&nbsp;,string&nbsp;fname);}//&nbsp;Same&nbsp;for&nbsp;IOrder&nbsp;and&nbsp;IOrderItem//public&nbsp;class&nbsp;&nbsp;BusinessLayer:&nbsp;IUser,&nbsp;IOrder,&nbsp;IOrderItem{&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;AddUser(string&nbsp;name&nbsp;,string&nbsp;fname) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Do&nbsp;stuffs&nbsp;here. &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;All&nbsp;methods&nbsp;from&nbsp;all&nbsp;interfaces&nbsp;must&nbsp;be&nbsp;implemented.}如果您只想添加用户,请执行以下操作:IUser&nbsp;user&nbsp;=&nbsp;new&nbsp;(IUser)BusinessLayer();//&nbsp;It&nbsp;will&nbsp;load&nbsp;&nbsp;all&nbsp;methods&nbsp;into&nbsp;memory&nbsp;which&nbsp;are&nbsp;declared&nbsp;in&nbsp;the&nbsp;IUser&nbsp;interface.user.AddUser();
打开App,查看更多内容
随时随地看视频慕课网APP
我要回答