【问题标题】:What is concrete implementation?什么是具体实现?
【发布时间】:2010-06-23 09:25:10
【问题描述】:

我在 StackOverflow 和其他地方看到了很多关于具体实现的帖子。在摆弄 WCF 时,我通过了这条线

绑定您的服务实现,或 任何“基于服务”的课程 具体实施从来都不是 好主意。

谁能解释一下具体实现是什么?

【问题讨论】:

标签: .net wcf


【解决方案1】:

它是抽象(抽象类、接口)的实现。 请注意,您只能实例化具体类的对象。

例如,如果您有:

abstract class AbstractClass
{
    .......
   // Here you have some abstract methods 
}

class ConcreteClass : AbstractClass
{
.......
}

在 WCF 的情况下,它想说的是,尽管允许使用 ServiceContract 属性更好地标记类,但最好将其放在单独的接口上,并在使用 ServiceBehavior 属性标记的具体类中实现该接口。

像这样:

[ServiceContract(Namespace = "MyNamespaceName")]
interface IMyInterface
{
    [OperationContract]
    int SomeMethod(.....);

   ......    
   ......    
}

[ServiceBehavior(......)]
public class SomethingConcrete : IMyInterface
{
    // implementation of SomeMethod
}

【讨论】:

    【解决方案2】:

    如果你有一个接口或抽象类,它需要被实现。

    实现了这样一个接口或类的类称为具体实现(因为只有这样一个实现的类才能被实例化)。

    所述原则意味着您不应直接针对具体实现进行编码,因为您可能希望稍后将其换成另一个具体实现而不更改您的代码。这意味着您应该使用接口和抽象类引用而不是具体实现。

    【讨论】:

      【解决方案3】:

      在“具体实施”一词中,“具体”一词是多余的。实现总是具体的,没有抽象的实现。所以,重要的只是“实施”一词。

      在这种情况下,这意味着您应该针对抽象而不是直接针对实现进行编码,即您为类必须支持的内容定义一个接口,并使用接口而不是类。这样一来,只要它们实现了接口,您就可以将一个实现替换为另一个实现。

      【讨论】:

      • 实现了接口的抽象类是零实现还是半实现?
      • @icelava:整个抽象类是抽象的,即使它包含接口的完整实现。将类标记为抽象只会阻止它被实例化,它不会阻止内容被实现。抽象类不必像接口那样完全抽象。 abstract 关键字在这个意义上可能有点误导,等效的 VB 关键字 MustInherit 实际上是一个更精确的术语。
      【解决方案4】:

      我终于从 Head First “设计模式”一书中明白了这一点。

      非常简单的解释。

      想象有一个接口或抽象类叫做 Animal 的 makeSound() 方法。

      想象一下还有一个带有 bark() 和 makeSound() 方法的 Dog 类。

      编程实现(具体实现) Dog 类到 Animal 将是

      Dog d = new Dog();
      d.bark();
      

      将接口/超类型 Dog 类编程到 Animal 将是

      Animal animal = new Dog();
      animal.makeSound();
      

      【讨论】:

        猜你喜欢
        • 2014-08-06
        • 2011-02-16
        • 2011-05-17
        • 2010-10-05
        • 2012-06-05
        • 2012-04-04
        • 1970-01-01
        • 1970-01-01
        • 2016-04-02
        相关资源
        最近更新 更多