Resumo : neste tutorial, você aprenderá sobre a interface C# e como usar as interfaces na programação para tornar o aplicativo mais extensível.
Introdução à interface C#
Uma interface define um contrato entre classes . Para definir uma interface, você usa a interface
palavra-chave seguida do nome da interface assim:
interface InterfaceName
{
}
Linguagem de código: C# ( cs )
Por convenção, os nomes de interface em C# começam com a letra I
maiúscula como IReadable
e IWritable
. Assim como uma classe, uma interface pode conter os seguintes membros:
- Métodos
- Propriedades
- Indexadores
- Eventos
Mas, diferentemente de uma classe, os membros de uma interface possuem apenas declarações. Em outras palavras, eles não contêm implementações. Por exemplo:
interface IMyInterface
{
void MyMethod();
}
Linguagem de código: C# ( cs )
Todos os membros de uma interface são public
por padrão. Portanto, você não precisa usar a public
palavra-chave para os membros da interface.
Observe que a partir do C# 8 ou posterior, os membros da interface podem ter implementações padrão .
Assim como uma classe abstrata , você não pode criar uma nova instância de uma interface. Para usar uma interface, você precisa implementá-la na sua classe . Por exemplo:
class MyClass: IMyInterface
{
public void MyMethod()
{
// implementation
}
}
Linguagem de código: C# ( cs )
Neste exemplo, definimos o MyClass
que implementa a IMyInterface
interface. A sintaxe usada para implementar uma interface é como a sintaxe usada para herdar de uma classe .
Neste exemplo, definimos o MyClass
que implementa a IMyInterface
interface. O modificador de acesso do MyMethod()
é público.
A classe que implementa uma interface precisa fornecer toda a implementação dos membros da interface.
Uma classe pode herdar de uma única classe, mas pode implementar múltiplas interfaces. Por exemplo:
class MyClass : IMyInterface1, IMyInterface2
{
//...
}
Linguagem de código: C# ( cs )
Exemplo de interface C#
O exemplo a seguir define uma interface simples chamada IReadable
com um método Read()
:
interface IReadable
{
string Read();
}
Linguagem de código: C# ( cs )
O seguinte define a ConsoleReader
classe que implementa a IReadable
interface:
class ConsoleReader : IReadable
{
public string Read()
{
return Console.ReadLine() ?? string.Empty;
}
}
Linguagem de código: C# ( cs )
Como a ConsoleReader
classe implementa a IReadable
interface, ela deve implementar o Read()
método. Isso é chamado de design por contrato.
O seguinte cria uma nova instância da ConsoleReader
classe e lê uma string do console:
// Program.cs
IReadable reader = new ConsoleReader();
string input = reader.Read();
Linguagem de código: C# ( cs )
Se quiser ler o conteúdo de um arquivo de texto , você pode definir uma nova classe FileReader
que implemente a IReadable
interface:
class FileReader : IReadable
{
public string Filename { get; set; }
public FileReader(string filename)
{
Filename = filename;
}
public string Read()
{
return File.ReadAllText(Filename);
}
}
Linguagem de código: C# ( cs )
A FileReader
classe possui a Filename
propriedade as e implementa o Read()
método da interface IReadable, que lê o conteúdo de um arquivo de texto especificado pela extensão Filename
.
O seguinte cria uma nova instância da FileReader
classe e lê todo o conteúdo do arquivo localizado em C:\temp\test.txt
:
// Program.cs
IReadable reader = new FileReader(@"C:\temp\test.txt");
string content = reader.Read();
Console.WriteLine(content);
Linguagem de código: C# ( cs )
Ambas ConsoleReader
as FileReader
classes e implementam a IReadable
interface. Isso significa que você pode trocá-los facilmente. Por exemplo, o seguinte define um método que aceita uma interface IReadable
:
string UppercaseReader(IReadable reader)
{
return reader.Read().ToUpper();
}
Linguagem de código: C# ( cs )
A UppercaseReader()
função chama o Read()
método e retorna a string em maiúsculas.
Ao chamar a UppercaseReader()
função, você pode passar uma instância de qualquer classe que implemente a IReadable
interface. Por exemplo:
// Program.cs
string UppercaseReader(IReadable reader)
{
return reader.Read().ToUpper();
}
IReadable[] readers = {
new ConsoleReader(),
new FileReader(@"C:\temp\test.txt")
};
foreach (var reader in readers)
{
Console.WriteLine(UppercaseReader(reader));
}
Linguagem de código: C# ( cs )
Neste exemplo, criamos um array que contém duas instâncias de classes que implementam a IReadable
interface e as passamos para a UppercaseReader()
função.
Resumo
- Uma interface é um contrato entre classes.
- Por convenção, o nome de uma interface começa com a letra
I
. - Uma interface contém membros incluindo métodos, propriedades, indexadores e eventos sem implementações.
- Uma classe que implementa uma interface deve fornecer implementações para os membros da interface.
- Uma classe pode implementar múltiplas interfaces.