什么是具体实施?

时间:2010-06-23 09:25:10

标签: .net wcf

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

  

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

任何人都可以解释具体实施是什么吗?

4 个答案:

答案 0 :(得分:12)

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

例如,如果你有:

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
}

答案 1 :(得分:9)

如果您有接口或抽象类,则需要实现它。

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

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

答案 2 :(得分:4)

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

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

答案 3 :(得分:1)

我终于理解了Head First" Design Pattern"书。

非常简单的解释。

想象一下,有一个名为Animal的接口或抽象类,带有makeSound()方法。

想象一下,还有使用bark()和makeSound()方法的Dog类。

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

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

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

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