我正在讨论一些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)
当你可以只是实例化类并使用它的方法和字段时,接口引用变量是什么意思?
如果你的代码知道将使用哪个类,那么你是对的,拥有一个接口类型变量是没有意义的.就像在你的例子中一样.该代码知道将要实例化的类是Worker,因为该代码不会神奇地改变并实例化其他任何东西 Worker.在这个意义上,你的代码加上与定义和使用的Worker.
但是你可能想要编写一些在不知道类类型的情况下工作的代码.以下面的方法为例:
public void stopWorker(IWorker worker) {
worker.stop(); // Assuming IWorker has a stop() method
}
Run Code Online (Sandbox Code Playgroud)
该方法不关心特定的类.它会处理任何实现的东西IWorker.
如果您以后想要使用不同的IWorker实现,那么您无需更改代码.
这都是关于你的代码之间的低耦合.这都是关于可维护性的.