接口引用变量

Tec*_*Guy 3 oop

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

当我创建一个界面时:

public interface IWorker
    {
        int HoneySum { get; }

        void getHoney();
    }
Run Code Online (Sandbox Code Playgroud)

并有一个类实现它:

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);
        }
    }
Run Code Online (Sandbox Code Playgroud)

为什么人们使用:

IWorker worker = new Worker();
            worker.getHoney();
Run Code Online (Sandbox Code Playgroud)

而不只是使用:

Worker worker3 = new Worker();
            worker3.getHoney();
Run Code Online (Sandbox Code Playgroud)

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

Ser*_*sta 5

如果你的代码知道将使用哪个类,那么你是对的,拥有一个接口类型变量是没有意义的.就像在你的例子中一样.该代码知道将要实例化的类是Worker,因为该代码不会神奇地改变并实例化其他任何东西 Worker.在这个意义上,你的代码加上与定义和使用的Worker.

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

public void stopWorker(IWorker worker) {
    worker.stop(); // Assuming IWorker has a stop() method
}
Run Code Online (Sandbox Code Playgroud)

该方法不关心特定的类.它会处理任何实现的东西IWorker.

如果您以后想要使用不同的IWorker实现,那么您无需更改代码.

这都是关于你的代码之间的低耦合.这都是关于可维护性的.