接口引用变量

时间:2010-08-30 05:14:22

标签: oop

我正在讨论一些OO基础知识并试图理解为什么使用Interface参数变量。

创建界面时:

public interface IWorker
    {
        int HoneySum { get; }

        void getHoney();
    }

并有一个类实现它:

public class Worker : Bee, IWorker
    {
        int honeySum = 15;

        public int HoneySum { get { return honeySum; } }

        public void getHoney()
        {
            Console.WriteLine("Worker Bee: I have this much honey: {0}", HoneySum);
        }
    }

为什么人们会使用:

IWorker worker = new Worker();
            worker.getHoney();

而不只是使用:

Worker worker3 = new Worker();
            worker3.getHoney();

当你可以只是实例化类并使用它的方法和字段时,接口引用变量是什么意思?

6 个答案:

答案 0 :(得分:5)

如果你的代码知道将使用哪个类,那么你是对的,拥有一个接口类型变量是没有意义的。就像在你的例子中一样。该代码知道将要实例化的类是Worker,因为该代码不会神奇地更改并实例化 Worker以外的任何内容。从这个意义上讲,您的代码耦合Worker的定义和使用。

但是你可能想要编写一些在不知道类类型的情况下工作的代码。以下面的方法为例:

public void stopWorker(IWorker worker) {
    worker.stop(); // Assuming IWorker has a stop() method
}

该方法不关心特定的类。它会处理任何实现IWorker的内容。

如果您希望稍后使用其他IWorker实施,则无需更改代码。

这就是你的代码之间的低耦合。这完全取决于可维护性。

答案 1 :(得分:0)

您希望尽可能保持通用,而不必与特定实现相关联。

答案 2 :(得分:0)

基本上,将接口用作类型是一种很好的编程习惯。这允许在不影响代码的情况下使用接口的不同实现。即如果传入的对象已经传入,那么您可以传入实现接口的任何内容而不会影响该类。但是,如果使用具体类,则只能传递该类型的对象。

有一个编程原则我不记得此时的名称适用于此。

答案 3 :(得分:0)

接口用于实现系统组件之间的松散耦合。您不是将系统限制为特定的具体IWorker实例。相反,您允许使用者指定他们想要使用的IWorker的具体实现。你从中得到的是松散依赖的组件和更好的灵活性。

答案 4 :(得分:0)

一个主要原因是提供与现有代码的兼容性。如果现有代码知道如何通过某个特定接口操作对象,则可以通过实现该接口立即使新代码与现有代码兼容。

这种能力对于长期维护尤为重要。您已经拥有一个现有框架,并且通常希望最小化对其他代码的更改,以使您的新代码适合框架。至少在理想情况下,您可以通过编写新代码来实现一些现有接口。一旦你这样做,知道如何通过这些接口操作对象的现有代码可以自动使用你的新类,就像它最初设计的那样。

答案 5 :(得分:0)

将接口视为协议而不是类,即此对象是否实现此协议与协议不同?例如,我的数字对象可以是可序列化的吗?它的类是一个数字,但它可能实现一个接口,通常描述它是如何序列化的。

给定的对象类实际上可以实现许多接口。