Analise o código a seguir retirado de uma aplicação desenvol...

Próximas questões
Com base no mesmo assunto
Ano: 2013 Banca: FCC Órgão: DPE-SP Prova: FCC - 2013 - DPE-SP - Programador de computador |
Q304596 Programação
Analise o código a seguir retirado de uma aplicação desenvolvida com C#:

interface IDimensions
{
float Length();
float Width();
}
class Box : IDimensions
{
float lengthInches;
float widthInches;
public Box(float length, float width)
{
lengthInches = length;
widthInches = width;
}
float IDimensions.Length()
{
return lengthInches;
}
float IDimensions.Width()
{
return widthInches;
}
public static void Main()
{
Box myBox = new Box(30.0f, 20.0f);
IDimensions myDimensions = (IDimensions) myBox;
System.Console.WriteLine("Length: {0}", myBox.Length());
System.Console.WriteLine("Width: {0}", myDimensions.Width());
}
}


Sobre o código apresentado é correto afirmar que a instrução
Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

A alternativa correta é a D. Vamos entender o motivo.

O código apresentado em C# está utilizando um conceito conhecido como implementação explícita de interface. Isso significa que ao implementar os métodos de uma interface, o nome da interface é usado como um prefixo para os nomes dos métodos, indicando que esses métodos só estarão acessíveis através de uma referência ao tipo da interface. Isso é útil para resolver conflitos de nomes quando uma classe implementa múltiplas interfaces que possuem métodos com o mesmo nome.

No código fornecido, a classe Box implementa uma interface chamada IDimensions. Os métodos Length() e Width() são implementados explicitamente, o que significa que só podem ser chamados através de uma referência à interface IDimensions, e não de uma referência a um objeto Box diretamente. Portanto, a linha:

System.Console.WriteLine("Length: {0}", myBox.Length());

irá resultar em um erro de compilação, já que o método Length() só é acessível através de uma referência ao tipo IDimensions, e não diretamente pelo objeto myBox do tipo Box. Por essa razão, a alternativa D é a correta.

As outras alternativas estão incorretas por diversos motivos:

  • A: A linha System.Console.WriteLine("Width: {0}", myDimensions.Width()); é válida porque myDimensions é do tipo IDimensions e pode acessar o método Width().
  • B: O construtor da classe Box está correto e aceita valores de ponto flutuante, que em C# são indicados com um f após o número, para representar um float literal.
  • C: O cast (IDimensions) myBox é válido e necessário para atribuir um objeto de uma classe a uma referência de interface que a classe implementa.
  • E: Em C#, para indicar que uma classe implementa uma interface, utiliza-se a palavra-chave : ao invés de implements, que é usada em Java. Portanto, a declaração da classe está correta.

Para resolver questões como esta, é essencial ter conhecimento sobre interfaces, implementação explícita e implícita de métodos de interface, e como esses conceitos são aplicados na linguagem C#.

Clique para visualizar este gabarito

Visualize o gabarito desta questão clicando no botão abaixo

Comentários

Veja os comentários dos nossos alunos

Alguém comenta?

Formatação ordinaria de quem transcreveu

interface IDimensions

  {

    float Length();

    float Width();

  }

  class Box : IDimensions

  {

    float lengthInches;

    float widthInches;

    public Box(float length, float width)

    {

      lengthInches = length; widthInches = width;

    }

    float IDimensions.Length()

   {

      return lengthInches;

    }

    float IDimensions.Width()

    {

      return widthInches;

    }

    public static void Main()

    {

      Box myBox = new Box(30.0f, 20.0f);

      IDimensions myDimensions = (IDimensions)myBox;

      System.Console.WriteLine("Length: {0}", myBox.Length());

      System.Console.WriteLine("Width: {0}", myDimensions.Width());

    }

  }

Linha Correta seria: System.Console.WriteLine("Length: {0}", myDimensions.Length());

Gab D: produzirá um erro de compilação porque um membro de uma interface que é explicitamente implementado não pode ser acessado a partir de uma instância de classe, mas apenas através de uma instância da interface.

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo