这是我在一次采访中被问到的一个问题。
创建 WCF 服务时,您会得到两个文件;“IService.cs”和“Service.cs”。为什么它是实现接口的类而不是继承抽象类的类。不要回复说您不能将 [servicecontract] 属性放在抽象类上。我知道您只能将其应用于接口,但为什么呢?
这是我在一次采访中被问到的一个问题。
创建 WCF 服务时,您会得到两个文件;“IService.cs”和“Service.cs”。为什么它是实现接口的类而不是继承抽象类的类。不要回复说您不能将 [servicecontract] 属性放在抽象类上。我知道您只能将其应用于接口,但为什么呢?
一个人可以实现多个接口。一个人只能继承一个抽象类。
WCF 将客户端与服务完全分离,如果您将服务的实现指定为服务,那么您将客户端与服务紧密耦合。
我能想到的几个原因:
[ServiceContract]
没有实现,为什么要浪费你在它上面的一个继承槽呢?例如,我们所有的服务类都继承自一个抽象ServiceBase
类,该抽象类除了实现[ServiceContract]
接口外,还提供通用的上下文状态和方法。但是,即使不是这种情况,我仍然会保留基类插槽以供将来使用。[ServiceContract]
如果合适,它允许一个服务类实现多个。[ServiceContract]
从另一个继承的严格合同版本控制系统,那么将服务类添加到同一继承树将破坏它。