使用显式接口确保针对接口进行编程

chi*_*s42 8 c# design-patterns interface

我已经看到了使用显式接口作为将类使用锁定到该接口的方法的参数.这个论点似乎是通过强迫其他人编程到接口,你可以确保更好地解耦类并允许更容易的测试.

例:

public interface ICut
{
    void Cut();
}
public class Knife : ICut
{
    void ICut.Cut()
    {
        //Cut Something
    }
}
Run Code Online (Sandbox Code Playgroud)

并使用Knife对象:

ICut obj = new Knife();
obj.Cut();
Run Code Online (Sandbox Code Playgroud)

你会推荐这种接口实现方法吗?为什么或者为什么不?

编辑:另外,鉴于我使用显式接口,以下将无法正常工作.

Knife obj = new Knife();
obj.Cut();
Run Code Online (Sandbox Code Playgroud)

erl*_*ndo 4

引用《GoF》第一章:

  • “针对接口编程,而不是实现”。
  • “优先考虑对象组合而不是类继承”。

由于 C# 没有多重继承,因此对象组合和接口编程是最佳选择。

ETA:无论如何你都不应该使用多重继承,但这完全是另一个话题..:-)

ETA2:我不太确定显式接口。这似乎没有建设性。如果实例化为 ICut,为什么我想要一把只能 Cut() 的 Knife?