![]() |
1
7
不,关键是允许使用接口的代码被编码到接口,而不是特定的实现。其优点在于,当您想以某种其他方式实现IfFuleStutoTiService服务时,不需要更改一个使用该接口的代码,而只需传递其他实现现有的“契约”的类。 |
![]() |
2
4
这样你就不需要知道它的实现。 您可以在代码中的任何地方针对接口进行编译,然后在运行时(即动态配置时),您可以放入接口的适当实现程序(在本例中为FormsAuthenticationService)。 因此,这意味着您可以随时交换实现,而不必 重新编译 必须的。 |
![]() |
3
3
接口是契约。实现接口的类声明“我遵守这个约定”
|
![]() |
4
3
当您看到只有一个 类型 那个 实现接口 . 接口对实现指定接口的类型强制执行协定。这意味着您可以平等地对待实现同一接口的任何类型,因为它们都实现同一接口。 这就是所谓的多态性。 例如,假设您输入 DrpckenAuthenticationService认证服务 并选择它来实现与上面所述相同的iformasauthenticationservice。
你猜怎么着,既然你有多种类型 实现相同的接口 ,你可以同样对待他们。例如,您可以有一个类型为IFormsAuthenticationService的方法参数,它将接受实现该接口的任何对象。
|
![]() |
5
2
接口允许您提供由接口定义的API的多个兼容实现。它们还允许其他开发人员提供完全独立于您的代码的实现。如果依赖于实现的应用程序部分总是通过定义的接口引用它,那么底层实现类本质上是不相关的;实现该接口的任何类都会这样做。 |
![]() |
6
2
这样想:这个接口允许您将任意类标记为实现SignIn()和SignOut()的类。所以当有人递给你一个对象时,你可以问“这是一个iFormasAuthenticationService吗?”如果是,则可以安全地强制转换到iformasauthenticationservice并调用其方法之一。能够独立于类层次结构执行此操作是非常有利的。 不要抗拒界面,试着尽可能多地使用它们一周,你的顿悟就会随之而来。 |
![]() |
7
2
界面很棒。 他们在描述行为时从来没有确切地说明该如何实现该行为。
.NET类库提供了大量的证据来描述行为,而不必实际说出幕后发生的事情。见
接口和抽象类之间可能存在一些混淆。注意,抽象类可以实现和执行它所需要的东西。它可能意味着一份合同,但不是。 接口没有实现,它只是一个方面和契约。这是一个非常非常有力的成语。尤其是在定义接口时,例如:
它突然使你的应用程序能够处理常规文件,压缩文件,FTP站点。。。名单还在后面。 接口是一个非常强大的习惯用法。无视它们,后果自负:) |
![]() |
8
2
如果一个类实现了一个接口,它会说:
但它并没有说明如何实现它们。
注意如何
这在哪里有用?
可能最重要的用途是当你需要一个
使用接口作为参数而不是具体类的好处是,将来如果您希望更改
|
![]() |
9
2
我们不应该做接口
对于
我们的类(也就是说以某种方式为它们服务),它们本身就是第一类实体,应该被视为第一类实体。不幸的是,您的困惑源于什么是糟糕的命名约定。当然
事实上,接口应该关注(并以)行为命名。通过这种分离,您会发现类和接口能够很好地相互补充,而不是像踩在彼此的脚趾上一样。 |
![]() |
10
1
继承提供了两个有用的功能:
几乎任何可以通过接口完成的事情都可以通过继承来完成,除了一件事:类只允许从单个基类继承。
接口允许类利用继承的第二个特性;然而,与继承不同的是,没有“单基”限制。如果一个类实现了20个不同的接口,那么它可以用在需要这些接口的代码中。 |
|
kaiselwyvrn · 我无法打开Visual Studio项目 1 年前 |
![]() |
Cobra_Fast · 如何查找不必要的空运算符? 2 年前 |
![]() |
lolorekkk · 面板插入。NET WinForm 2 年前 |