问一个关于接口的问题...

liqi_good 2007-04-03 02:51:14
本人从学到用C#已经有半年多了,其中自己做个几个项目,但发现,我做过的所有项目里,都没用用到过接口这个概念..

所以现在想问一下各位,就是想知道接口应该"何时用,为何用"?
...全文
215 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
photoplan 2007-10-06
  • 打赏
  • 举报
回复
举个小例子,
string[] arr = ...;
arr.Contains("abc"); 这个有错误
((IList)arr).Contains("abc"); 这个可以

这个也算吧,哈哈。

小玩笑楼主别介意。
spkl1 2007-04-03
  • 打赏
  • 举报
回复
mark
我也认真学习```
ristona 2007-04-03
  • 打赏
  • 举报
回复
INTERFACE主要还是要从设计来理解,不能完全从代码层面来理解.
一般使用接口有两个目的,一,解耦,二,扩展.其实没有接口,在不考虑扩展的前提,完全可以没有接口.

因此,楼主先不要关键,慢慢来,先熟悉OO的基本概念,然后再慢慢接触一些设计方面的知识后,你就会自然而然的理解和应用.

PS:千万不要为了做接口而接口,那样通常会误用,反而不利于扩展了.
liqi_good 2007-04-03
  • 打赏
  • 举报
回复
似乎有一点点开窍了...希望能再看到一些高手说一下..
namhyuk 2007-04-03
  • 打赏
  • 举报
回复
应该说不是何时用,为何用的问题了,而是不得不用,没法不用。

接口还有虚函数都一种运行时动态绑定的意思。也就是说写代码的时候根本没法确定到时会执行什么。你可以从这个角度开始考虑问题。什么情况下,我是根本无法预测会执行哪个?但我可以预先把运行逻辑写好,是不是会有这种情况???
再想想,这种情况是不是太多太多了?

一个非常典型的例子就是数据绑定。仔细了解一下的话,你会发现要实现数据绑定这样的功能,没有接口是根本无法实现的。这就是不得不用。


adodotnet 2007-04-03
  • 打赏
  • 举报
回复
用不上的地方也确实没必要用。

但确实一开始编C#程序,就算是最简单的,那后面也是有好多的接口参与着,不是吗?

笼统的讲,我想用同一种方式使用不同派系的功能时用接口。

IMyInterface interface = class1;
interface.Go(); //执行Class1的Go

下一时刻 interface = class2;
inteface.Go(); //执行Class2的Go

再下一个时刻...

一个interface就可以执行各种类的方法。我甚至可以在代码里先
interface.Go(); 没必要预先知道我要执行谁的Go

只要哪个在实现了IMyInterface,还有接口定义的Go方法,那么我就能执行。我预先不管你是哪家来的,只要你实现了IMyInterface,那你就能被我调用。

。。。。
JavaK 2007-04-03
  • 打赏
  • 举报
回复
adodotnet() ( ) 信誉:100 Blog
已经说得很好了,我再说一下,接口做用主要一点就是用来规范程序。另一个比较灵活的适用就是 可以这样:ITest {void Hello();} <]--- Test1{public void Hello{Console.WriteLine("test1");}}, Test2{public void Hello {Console.WriteLine("test2")}} (Test1和Test2分别inherit ITest)
现有一个
ClassA {
public ITest GetTest(ITest itest) {
...
return itest;
}
}

...
ClassA classA = new ClassA();
ITest itest = classA.GetTest(new Test1());
itest.Hello();
itest = classA.GetTest(new Test2());
itest.Hello();
楼主试试吧,这样就可以很灵活的写代码了。
liqi_good 2007-04-03
  • 打赏
  • 举报
回复
所以我现在就是想请教,什么时候该用接口,为什么要在这时用接口?

希望各位把自己的开发经验告诉一下...谢谢了...
he_8134 2007-04-03
  • 打赏
  • 举报
回复
做的项目越小越不会用到~~~就像一些工程图纸一样~~~你捏个泥巴用不着先画图纸~~~
liqi_good 2007-04-03
  • 打赏
  • 举报
回复
我知道接口有这个属性..但我现在想问的是:"何时用,为何用"?

不过好是谢谢LS的..
一、在基于Laravel8.x实现API接口签名认证系统课程里: 我将带领大家基于laravel 8.x来开发用户认证系统与接口签名验证系统以解决API接口请求中的安全,我将带领同学们认识Laravel用户认证的两大核心要素,守卫者与数据提供者,并从源码层面分析用户认证中涉及到的核心概念,通过基于接口签名的认证逻辑,带领同学们实现自定义守卫者以及签名认证器,实现基于签名认证的用户登陆逻辑,并基于该守卫者实现一个接口签名认证中间件对接口请求进行拦截处理。 在实战过程中,涉及到的核心概念我们会在源码层面对其原理进行阐述,以帮助同学们更好地掌握这些知识。 在完成上述功能后,我们会带领大家将我们实现的基于接口签名认证的用户认证与接口认证逻辑封装成Laravel扩展包,从而使得我们的代码与Laravel核心框架解耦,以保证功能上的独立性和可复用性。 二、在基于Laravel 7.x的后台权限验证API课程里: 以后台权限验证API的开发为载体,带领大家使用Laravel 7.x进行权限扩展包的开发,你将学习到如下知识: 1、如何使用laravel编写Restful api接口 2、如何使用composer进行项目依赖管理,laravel常用扩展的安装与使用,如dingo/api 以及repository 3、如何使用jwt进行实现后台用户认证机制 4、学习使用laravel扩展包的形式进行后台权限验证API的开发 5、如何编写Seeders帮助我们在新系统里实现数据的初始化 6、理解和使用Laravel核心概念和面向接口的编程思想 三、这两套课程分别解决的是API接口请求的安全接口权限

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧