インターフェイスは、クラスが何かを実行できなければならないことを定義します。これは、作業中のオブジェクトが、実行したいことを実行することを知っていることを意味します。これにより自由度が増し、OOP の利点の 1 つになります。これは深いトピックですが、非常に基本的な例は次のとおりです。
public interface IAnimal
{
string Speak();
}
public class Dog : IAnimal
{
public string Speak()
{
return "Woof, woof";
}
}
public class Cat : IAnimal
{
public string Speak()
{
return "Meow";
}
}
public class Parrot : IAnimal
{
public string Speak()
{
return "Sqwark!";
}
}
次に、好きな動物を使用できます。
class Program
{
static void Main(string[] args)
{
// Writes Woof, Woof
IAnimal animal = new Dog();
Console.WriteLine(animal.Speak());
// Now writes Meow
animal = new Cat();
Console.WriteLine(animal.Speak());
// Now writes Sqwark etc
animal = new Parrot();
Console.WriteLine(animal.Speak());
}
}
これにより、次のようにアイテムを取り込んで、犬、猫、またはオウムを渡すことができるInversion Of Control のようなものに入ることができます。この方法は、それがどの動物であるかを知らず、気にしなくても常に機能します。
public void ShoutLoud(IAnimal animal)
{
MessageBox.Show("Shout " + animal.Speak());
}
これにより、実際の動物ではなくモック オブジェクトを使用できるため、ShoutLoudユニットがテスト可能になります。基本的に、コードを厳格で密結合するのではなく、柔軟で動的にします。
また、マシューの質問を拡張します。C# では、1 つの基本クラスからしか継承できませんが、複数のインターフェイスを持つことができます。したがって、次のようにすることができます。
public class Dog : IAnimal, IMammal, ICarnivor
これにより、小さなインターフェース (推奨) を持つことができ、それを構築して、アイテムができること/しなければならないことを最大限に制御できます。