4

这是我在一次采访中被问到的一个问题。

创建 WCF 服务时,您会得到两个文件;“IService.cs”和“Service.cs”。为什么它是实现接口的类而不是继承抽象类的类。不要回复说您不能将 [servicecontract] 属性放在抽象类上。我知道您只能将其应用于接口,但为什么呢?

4

3 回答 3

6

一个人可以实现多个接口。一个人只能继承一个抽象类。

于 2011-12-19T17:00:24.430 回答
6

WCF 将客户端与服务完全分离,如果您将服务的实现指定为服务,那么您将客户端与服务紧密耦合。

于 2011-12-19T17:01:16.700 回答
1

我能想到的几个原因:

  • 明确的意图声明——“这组 API 签名与任何可能的实现完全分离”。相比之下,抽象类(在我看来)更像是“这个基类旨在与这组派生类一起使用”的声明。
  • 更开放的修改 - 一旦你继承一个基类,就是这样。既然 a[ServiceContract]没有实现,为什么要浪费你在它上面的一个继承槽呢?例如,我们所有的服务类都继承自一个抽象ServiceBase类,该抽象类除了实现[ServiceContract]接口外,还提供通用的上下文状态和方法。但是,即使不是这种情况,我仍然会保留基类插槽以供将来使用。
  • [ServiceContract]如果合适,它允许一个服务类实现多个。
  • 如果您使用的是依赖于[ServiceContract]从另一个继承的严格合同版本控制系统,那么将服务类添加到同一继承树将破坏它。
于 2012-05-11T20:32:57.537 回答