Interface C#

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 interfacepalavra-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 Imaiúscula como IReadablee IWritable. Assim como uma classe, uma interface pode conter os seguintes membros:

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 publicpor padrão. Portanto, você não precisa usar a publicpalavra-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 MyClassque implementa a IMyInterfaceinterface. A sintaxe usada para implementar uma interface é como a sintaxe usada para herdar de uma classe .

Neste exemplo, definimos o MyClassque implementa a IMyInterfaceinterface. 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 IReadablecom um método Read():

interface IReadable
{
    string Read();
}Linguagem de código:  C#  ( cs )

O seguinte define a ConsoleReaderclasse que implementa a IReadableinterface:

class ConsoleReader : IReadable
{
    public string Read()
    {
        return Console.ReadLine() ?? string.Empty;
    }
}Linguagem de código:  C#  ( cs )

Como a ConsoleReaderclasse implementa a IReadableinterface, ela deve implementar o Read()método. Isso é chamado de design por contrato.

O seguinte cria uma nova instância da ConsoleReaderclasse 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 FileReaderque implemente a IReadableinterface:

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 FileReaderclasse possui a Filenamepropriedade 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 FileReaderclasse 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 ConsoleReaderas FileReaderclasses e implementam a IReadableinterface. 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 IReadableinterface. 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 IReadableinterface 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.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *