Interfejsy definiują, że klasa MUSI być w stanie coś zrobić. Oznacza to, że wiesz, że obiekt, nad którym pracujesz, zrobi to, co chcesz. Pozwala na większą swobodę i zalety OOP. To jest głęboki temat, ale bardzo prosty przykład:
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!";
}
}
Następnie można użyć dowolnego zwierzęcia, które lubisz!
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());
}
}
ta pozwala również wtedy dostać się do rzeczy jak odwrócenie sterowania gdzie zabrałbyś element tak i można przechodzić do psa, kota lub papugi i metoda zawsze pracują, nie wiedząc, lub opiekuńczego, które zwierzę było:
public void ShoutLoud(IAnimal animal)
{
MessageBox.Show("Shout " + animal.Speak());
}
to wtedy sprawia ShoutLoud jednostka sprawdzalne ponieważ można użyć atrapa obiektu zamiast prawdziwego zwierzęcia. Zasadniczo sprawia, że twój kod jest elastyczny i dynamiczny, a nie sztywny i ściśle powiązany.
Ponadto, rozszerzenie na pytanie Matthew. W języku C# można dziedziczyć tylko z jednej klasy bazowej, ale można mieć wiele interfejsów. Tak, można mieć:
public class Dog : IAnimal, IMammal, ICarnivor
To pozwala mieć interfejsy małe (zalecane), które następnie pozwalają budować tak daje maksymalną kontrolę nad tym, co przedmiot może/musi zrobić.
Zaznacz to: http://dotnet.dzone.com/articles/c-interfaces-what-are-they-and –
To błędne nazwać instancja interfejsu. Jest to instancja klasy, ale przypisana do odwołania do typu interfejsu. –