所以我对 C# 和接口(interface)的使用还很陌生,当我认为我理解它们时,我意识到我并不完全理解。我发现我在这里寻求澄清的困惑是,当您创建一个接口(interface)并让一个类继承它时
public Interface ISomeInterface
{
//some methods/properties
}
public class FooClass : ISomeInterface
{
//implemented ISomeInterfaces methods/properties
}
然后您在程序某处的实现中使用此类对象
public class BarClass
{
private ISomeInterface _someInterface;
public BarClass(ISomeInterface someInterface)
{
_someInterface = someInterface;
}
//rest of class
}
我的困惑是为什么我看到它是这样设置的。我以为我会实例化一个 FooClass 类型的新对象,并在构造函数中使用一个 FooClass 类型的对象:
public class BarClass
{
private FooClass _fooClass;
public BarClass(FooClass fooClass)
{
_fooClass = fooClass;
}
//rest of class
}
我缺少什么来理解这一点?我不认为我会直接声明接口(interface)的对象?
提前致谢。
最佳答案
想法是 BarClass
不应与 ISomeInterface
的特定实现紧密耦合。
如果你使用这个:
public BarClass(FooClass fooClass)
这意味着 BarClass 只能与这个特定的 FooClass 实现一起工作,而不能与其他任何东西一起工作。而如果您使用:
public BarClass(ISomeInterface fooClass)
现在 BarClass
不再与 FooClass
紧密耦合。这意味着 BarClass
的消费者现在可以传递他想要的接口(interface)的任何实现,只要它尊重定义的契约(接口(interface))。因此,如果他想要 FooClass
,他会传递 FooClass
的实例,但如果他对 FooClass
不满意,他可以编写自己的实现并传递它对于构造函数,从 BarClass
的角度来看,这是绝对透明的(不需要修改)。
类之间的弱耦合是 OOP 最基本的方面之一,因为它允许您轻松地将一个组件替换为另一个组件,而无需重写整个应用程序。
关于c# - 我想我错过了 "Programming to an interface"概念的一些东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4233249/