Default interface methods no C#

Interfaces com métodos padrões se trata da capacidade de adicionar assinaturas de métodos em uma interface com um corpo definido (com um comportamento padrão ou mesmo um corpo vazio) fazendo com que as classes que implementam essa interface não tenham a obrigatoriedade de implementar esse novo método adicionado na interface.

Imagine o seguinte cenário genérico:

Temos uma interface IAnimal que contém métodos comuns que simulam comportamentos comuns de todos os animais.

public interface IAnimal { void MakeSound(); void Eat(); void Sleep();
}
Enter fullscreen mode Exit fullscreen mode

Temos 3 classes que representam animais terrestres e que implementam a interface IAnimal.

public class Dog : IAnimal
{ public void Eat() { } public void MakeSound() { } public void Sleep() { }
} public class Cat : IAnimal
{ public void Eat() { } public void MakeSound() { } public void Sleep() { }
} public class Rabbit : IAnimal
{ public void Eat() { } public void MakeSound() { } public void Sleep() { }
}
Enter fullscreen mode Exit fullscreen mode

E também temos uma outra classe de um animal voador, que também implementa a interface IAnimal.

public class Bird : IAnimal
{ public void Eat() { } public void MakeSound() { } public void Sleep() { } public void Fly() { }
}
Enter fullscreen mode Exit fullscreen mode

Agora, digamos que precisamos adicionar um novo método “Run” na nossa interface IAnimal, porém não queremos que ela tenha uma implementação concreta na classe do animal voador “Bird”, somente nas classes dos animais terrestres.

Podemos fazer dessa forma, adicionando um corpo ao método dentro da interface:

public interface IAnimal { void MakeSound(); void Eat(); void Sleep(); public void Run() { }
}
Enter fullscreen mode Exit fullscreen mode

Agora nossas classes que representam animais terrestres, podem implementar esse novo método.

public class Dog : IAnimal
{ public void Eat() { } public void MakeSound() { } public void Sleep() { } public void Run() { Console.WriteLine("Running..."); }
} public class Cat : IAnimal
{ public void Eat() { } public void MakeSound() { } public void Sleep() { } public void Run() { Console.WriteLine("Running..."); }
} public class Rabbit : IAnimal
{ public void Eat() { } public void MakeSound() { } public void Sleep() { } public void Run() { Console.WriteLine("Running..."); }
}
Enter fullscreen mode Exit fullscreen mode

Enquanto nossa classe que representa um animal voador “Bird” não precisará fazer essa implementação, então ela permanece assim:

public class Bird : IAnimal
{ public void Eat() { } public void MakeSound() { } public void Sleep() { } public void Fly() { }
}
Enter fullscreen mode

Como você viu, pode ser muito útil utilizar esse recurso, porém fique atento para acabar não poluindo a interface ou mesmo quebrando o princípio SRP (Single Responsability Principle) ao adicionar métodos demasiadamente ou métodos que não fazem parte do contexto da interface.


Discover more from Coursity

Subscribe to get the latest posts sent to your email.

Leave a Comment

Your email address will not be published. Required fields are marked *

Discover more from Coursity

Subscribe now to keep reading and get access to the full archive.

Continue reading

Scroll to Top
What are the benefits of devops services ?. An educational background in web development is fundamental to becoming a web developer.