using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Miscellaneous_Files
{
class Program
{
static void Main(string[] args)
{
DeskFan fan = new DeskFan(new PowerSupply());
Console.WriteLine(fan.Work());
}
}
public interface IPowerSupply //电源接口
{
int GetPower();
}
public class PowerSupply : IPowerSupply //实现电源接口。意思是和它要电,就给电了
{
public int GetPower()
{
return 100; //给电值
}
}
public class DeskFan
{
private IPowerSupply _powerSupply; //紧耦合
public DeskFan(IPowerSupply powerSupply)
{
this._powerSupply = powerSupply;
}
public string Work()
{
int power = _powerSupply.GetPower();
if (power <= 0)
{
return "Won't work";
}
else if (power < 100)
{
return "Slow";
}
else if (power < 200)
{
return "Work fine";
}
else { return "Warning !"; }
}
}
}
这段代码是一个简单的示例,展示了在C#中如何使用接口和依赖注入的概念。依赖注入是一种设计模式,它允许我们将一个对象(服务)注入到另一个对象(客户端)中,而客户端对象不需要知道服务的具体实现。
下面是代码的工作原理:
- IPowerSupply 接口: 这个接口定义了一个名为
GetPower
的方法,返回一个整数。 - PowerSupply 类: 这个类实现了
IPowerSupply
接口,并提供了GetPower
方法的具体实现,该方法简单地返回100。 - DeskFan 类: 这个类有一个名为
_powerSupply
的私有字段,是IPowerSupply
类型的。它还有一个构造函数,该构造函数接收一个IPowerSupply
类型的参数,并将其赋值给_powerSupply
字段。这个类还有一个Work
方法,该方法使用_powerSupply
来获取电力,并根据电力的多少返回不同的字符串。 - Program 类: 这是主程序入口,它创建了一个
DeskFan
对象,并将一个新的PowerSupply
对象作为参数传递。然后,它调用Work
方法并打印返回的字符串。
当你运行这个程序时,它将打印出 "Work fine",因为电力供应(100)在100到200之间。
这段代码的工作原理是展示了依赖注入和接口的基本使用,让我们可以在运行时改变 PowerSupply
的实现,而不需要改变 DeskFan
类的代码。这是一种使代码更灵活、可测试性更好的方法。
其中,IPowerSupply
是一个接口,而不是一个类。在 C# 中,接口是一种引用类型,就像类一样。因此,你可以使用接口名来声明一个字段,该字段的类型可以是实现了该接口的任何类的实例。在 DeskFan 类中,_powerSupply
字段是 IPowerSupply
类型的,这意味着它可以引用任何实现了 IPowerSupply
接口的类的实例。这样做的好处是,你可以随时更改 _powerSupply
字段引用的类的类型,只要这个类实现了 IPowerSupply
接口,而无需更改 DeskFan
类的代码。这是依赖注入和接口的主要优点之一。