Resumo : neste tutorial, você aprenderá como definir uma interface que estende uma única interface ou múltiplas interfaces.
Estendendo uma interface
C# permite que uma interface estenda uma ou mais interfaces. O exemplo a seguir ilustra como definir uma interface que estende outra interface:
Primeiro, defina a IUndoable
interface que possui um método Undo()
:
interface IUndoable
{
void Undo();
}
Linguagem de código: C# ( cs )
Segundo, defina a IRedoable
interface que estende a IUndoable
interface:
interface IRedoable : IUndoable
{
void Redo();
}
Linguagem de código: C# ( cs )
Neste exemplo, a IRedoable
interface herda todos os membros da IUndoable
interface. Em outras palavras, uma classe que implementa a IRedoable
interface também deve fornecer implementações para Redo()
o método na IRedoable
interface e para o Undo()
método da IUndoable
interface.
Terceiro, defina a Input
classe que implementa a IRedoable
interface:
class Input : IRedoable
{
public void Redo()
{
Console.WriteLine("Redo");
}
public void Undo()
{
Console.WriteLine("Undo");
}
}
Linguagem de código: C# ( cs )
Por fim, crie uma instância da Input
classe e chame os métodos Undo()
e :Redo()
var input = new Input();
input.Undo();
input.Redo();
Linguagem de código: C# ( cs )
Saída:
Undo
Redo
Linguagem de código: C# ( cs )
Estendendo múltiplas interfaces
Para definir uma interface que estende duas ou mais interfaces, use a seguinte sintaxe:
interface IMyInterface: IMyInterface1, IMyInterface2, IMyInterface3
{
}
Linguagem de código: C# ( cs )
Nesse caso, MyInterface
herda todos os membros de todas as interfaces, incluindo IMyInterface1
, IMyInterface2
e IMyInterface3
.
Em outras palavras, uma classe que implementa as MyInterface
necessidades fornece implementações para todos os membros dessas interfaces.
O exemplo a seguir ilustra como definir uma interface que estende várias interfaces.
Primeiro, defina duas interfaces IStore
e IRetrieve
:
interface IStore
{
void Store(string data);
}
interface IRetrieve
{
string? Retrieve();
}
Linguagem de código: C# ( cs )
Segundo, defina uma interface IMessage
que estenda as interfaces IStore
e :IRetrieve
interface IMessage : IStore, IRetrieve
{
void Delete();
}
Linguagem de código: C# ( cs )
A IMessage
interface possui seu próprio método Delete()
. Ele também herda métodos das interfaces IStore
e IRetrieve
. Isso significa que uma classe que implementa a IMessage
interface precisa implementar todos os três métodos.
Terceiro, defina a Message
classe que implementa a IMessage
interface:
class Message : IMessage
{
private string? data = null;
public void Delete()
{
data = null;
}
public string? Retrieve()
{
return data;
}
public void Store(string message)
{
data = message;
}
}
Linguagem de código: C# ( cs )
Por fim, crie uma instância da Message
classe e chame seus métodos:
// Program.cs
Message message = new();
message.Store("Hello");
Console.WriteLine(message.Retrieve());
message.Delete();
Linguagem de código: C# ( cs )
Saída:
Hello
Linguagem de código: C# ( cs )
Resumo
- Uma interface pode estender uma ou mais interfaces.
- Uma classe que implementa uma interface precisa fornecer implementações para todos os membros da interface e para os membros que a interface herda de outras interfaces.