Define a method with an interface as a parameter
In C#, interfaces establish a contract for classes. In this unit, you explore how methods accept interfaces as parameters, learn the syntax for defining these methods, and review a practical sample implementation.
Methods that accept an interface
Your methods in C# can accept interfaces as parameters to ensure that the passed objects adhere to specific contracts. Using interfaces as parameters allows for more flexible and reusable code.
For instance, consider a method that accepts an IAnimal
interface as a parameter:
public interface IAnimal
{
void MakeSound();
}
public void MakeAnimalSound(IAnimal animal)
{
animal.MakeSound();
}
In this example, the MakeAnimalSound
method accepts an IAnimal
interface, ensuring that any object passed to it has a MakeSound
method.
Note
Using interfaces as method parameters promotes loose coupling and enhances testability.
Example: interfaces as method parameters
In the following example, we have several files each containing a different class or interface. It's common to place items in separate files for better organization and readability.
IAnimal.cs
The IAnimal.cs
file defines the IAnimal
interface, which includes a method MakeSound
.
public interface IAnimal
{
void MakeSound();
}
Dog.cs
and Cat.cs
These files contain the Dog
and Cat
classes, which implement the IAnimal
interface and provide the MakeSound
method.
public class Dog : IAnimal
{
public void MakeSound()
{
Console.WriteLine("Woof!");
}
}
public class Cat : IAnimal
{
public void MakeSound()
{
Console.WriteLine("Meow!");
}
}
AnimalSound.cs
This file contains the AnimalSound
class, which has a method MakeAnimalSound
that accepts an IAnimal
interface as a parameter and calls the MakeSound
method.
public class AnimalSound
{
public void MakeAnimalSound(IAnimal animal)
{
animal.MakeSound();
}
}
Program.cs
This file contains the Program
class with the Main
method, which creates instances of Dog
and Cat
, and uses the AnimalSound
class to make them produce sounds.
public class Program
{
public static void Main()
{
IAnimal dog = new Dog();
IAnimal cat = new Cat();
AnimalSound animalSound = new AnimalSound();
animalSound.MakeAnimalSound(dog); // Output: Woof!
animalSound.MakeAnimalSound(cat); // Output: Meow!
}
}
This example demonstrates how interfaces can be used as method parameters, promoting loose coupling and enhancing testability. It's a simple yet effective way to understand the concept of interfaces in C#.