So it will highlight, that an interface can have multiple implementations (which differs) at the same time
		
			
				
	
	
		
			76 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
---
 | 
						|
title: Interface
 | 
						|
---
 | 
						|
---
 | 
						|
An interface is similar to a class or struct but without implementation for its members.
 | 
						|
An interface declares a contract or a behavior that implementing classes should have.
 | 
						|
It may declare only properties, methods and events with NO access modifiers.
 | 
						|
 | 
						|
All the declared members must be implemented in the inharit class, otherwise will have an compile error.
 | 
						|
as a convention we will mark interface with the letter I at the begenning (IMyInterface || IUserOptions).
 | 
						|
You define an interface by using the interface keyword.
 | 
						|
 | 
						|
All members of an interface are:
 | 
						|
implicitly abstract,
 | 
						|
implicitly public, cannot declare an access modifier such as protected, internal private etc...
 | 
						|
 | 
						|
An Interface can:
 | 
						|
* Inherit from other interfaces.
 | 
						|
* Inherit from multiple interfaces at the same time
 | 
						|
* Contain only methods, properties, events, and indexers.
 | 
						|
 | 
						|
An Interface can not :
 | 
						|
* Inherit from a class.
 | 
						|
* Have implementation.
 | 
						|
* Have access modifiers other than public.
 | 
						|
* Be instantiated.
 | 
						|
---
 | 
						|
 | 
						|
Using interfaces allows us to change our implementation in our project without breaking other parts,
 | 
						|
and only have to change the one place where the object is created.
 | 
						|
 | 
						|
Interface Example:
 | 
						|
```csharp
 | 
						|
public Interface IUserFavoriteFood
 | 
						|
{
 | 
						|
  void AddFood();
 | 
						|
  Task<User> EatFavoriteFood(int id);
 | 
						|
}
 | 
						|
```
 | 
						|
---
 | 
						|
Interface inheritance and implementation:
 | 
						|
```csharp
 | 
						|
public class UserHungry : IUserFavoriteFood
 | 
						|
{
 | 
						|
  public AddFood()
 | 
						|
  {
 | 
						|
    // Implementation:
 | 
						|
    // A method to add food.
 | 
						|
  }
 | 
						|
 | 
						|
  public Task<User> EatFavoriteFood(int id)
 | 
						|
  {
 | 
						|
    // Implementation:
 | 
						|
    // A method to Eat food by id.
 | 
						|
  }
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
Every implementation can be different:
 | 
						|
```csharp
 | 
						|
public class AnotherUserHungry : IUserFavoriteFood
 | 
						|
{
 | 
						|
  public AddFood()
 | 
						|
  {
 | 
						|
    // DIFFERENT Implementation:
 | 
						|
    // A method to add vegan food.
 | 
						|
  }
 | 
						|
  
 | 
						|
  public Task<User> EatFavoriteFood(int id)
 | 
						|
  {
 | 
						|
    // DIFFERENT Implementation:
 | 
						|
    // A method to Eat only vegan food by id.
 | 
						|
  }
 | 
						|
}
 | 
						|
```
 |