IDisposable 只是一个接口,但问题可能被概括为“当我可以简单地实现方法时,为什么要实现接口?”。这是另一个可能会有所启发的示例:在使用类时它很重要。
interface IAnimal
{
void PutInZoo(Zoo);
}
class Cat: IAnimal
{
public void PutInZoo(Zoo theZoo);
}
class Fish
{
public void PutInZoo(Zoo theZoo);
}
class Zoo
{
public void PutInZoo(IAnimal animal)
{
animal.PutInZoo(this);
}
public Zoo()
{
this.PutInZoo(new Cat()); // Ok
this.PutInZoo(new Fish()); // Nope, Fish doesn't implement IAnimal
}
}
除了编译错误之外,实现接口最突出的副作用是,如果接口发生变化,您必须遵守它。
在此示例中,如果IAnimal
更改其定义PutInZoo
并重命名为FreeFromZoo
,Fish
仍会编译(并且可能会破坏其使用者)但Dog
不会:它不再实现IAnimal
.