O documento apresenta 10 perguntas e respostas sobre programação em C# para avaliação de conhecimentos de um programador. As perguntas abordam tópicos como depuração de erros de compilação, uso de classes, arrays, bancos de dados SQL Server e serialização.
1. F -X C h a n ge F -X C h a n ge
PD PD
!
!
W
W
O
O
N
N
y
y
bu
bu
to
to
k
k
lic
lic
Questionário de pré-avaliação – Programador C#
C
C
w
w
m
m
w w
w
w
o
o
.d o .c .d o .c
c u -tr a c k c u -tr a c k
1. Você é um programador c# na empresa 3XY Tecnologia e o seu líder de equipe lhe entregou
o código abaixo reclamando que por alguma razão o código não compila exibindo a mensagem
“Índice (baseado em zero) deve ser maior ou igual a zero e menor que o tamanho da lista de
argumentos”. O que está ocasionando o erro acima?
1 int numerador = 10;
2 int denominador = 2;
3 int resultado = numerador / denominador;
4 Console.Write("O resultado da expressão {0} multiplicado por {1} é
5 {2}.", denominador, numerador); Console.WriteLine(resultado);
a) A linha 3 deveria ser int resultado = denominador * numerador;
b) A mensagem acima só aparece quando tenta compilar o código em modo debug. Para
corrigir o problema basta alterar o modo de compilação para release;
c) A linha 5 deveria ser {2}.", denominador, resultado, numerador);
d) Para que mensagens internas do compilador não apareçam no momento da compilação o
desenvolvedor deve desabilitar a opção “Thrown” no menu Debug -> Exceptions -> Common
Language Runtime Exceptions;
e) A linha 4 deveria ser Console.Write("O resultado da expressão {0} dividido por {1} é;
2. O seu colega de trabalho escreveu o código abaixo:
1 public abstract class Cor
2 {
3 public string Nome { get; set; }
4 }
5
6
public class Carro
7
{
8 public string Marca { get; set; }
9 public string Modelo { get; set; }
10 public int AnoFabricacao { get; set; }
11 public int AnoModelo { get; set; }
12 public Cor Cor { get; set; }
13
14 public Carro()
15 {
16 this.Cor = new Cor().Nome = "Amarelo";
17 }
18 }
Ao tentar compilar você percebe que o código apresenta erro. Qual providência você toma?
a) Reescreve a linha 16 da seguinte forma:
this.Cor = new Cor();
this.Cor.Nome = "Amarelo";
b) Renomeia a propriedade Cor da classe Carro nas linhas 12 e 16 para _Cor pois uma classe não
pode conter uma propriedade com o mesmo nome de outra classe já existente;
c) Dá um Clean Solution para limpar as sujeiras do código e o próprio Visual Studio se auto-
recuperará do problema ocorrido;
d) Renomeia a classe Cor para CorDeCarro na linha 1 e replicar a alteração nas linhas 12 e 16
para evitar que uma propriedade tenha o mesmo nome de uma classe;
e) Remove a palavra reservada abstract da linha 1;
Questionário elaborado em 05/01/2010 por Renato Ucha
2. F -X C h a n ge F -X C h a n ge
PD PD
!
!
W
W
O
O
N
N
y
y
bu
bu
to
to
k
k
lic
lic
Questionário de pré-avaliação – Programador C#
C
C
w
w
m
m
w w
w
w
o
o
.d o .c .d o .c
c u -tr a c k c u -tr a c k
3) Olhando o programa abaixo, responda a ordem em que as mensagens serão exibidas na
tela:
public class NotificadorDeTempo
{
public event EventHandler TempoDecorrido;
public void Aguardar()
{
Thread thread = new Thread(new ThreadStart(Aguardar5s));
thread.Start();
}
private void Aguardar5s()
{
Thread.Sleep(5000);
OnTempoDecorrido();
}
private void OnTempoDecorrido()
{
if (this.TempoDecorrido != null)
this.TempoDecorrido(this, new EventArgs());
}
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Iniciando...");
NotificadorDeTempo notificador = new NotificadorDeTempo();
notificador.TempoDecorrido += new EventHandler(notificador_TempoDecorrido);
Console.WriteLine("Começou a contagem...");
notificador.Aguardar();
Console.WriteLine("Finalizou o chamado da função...");
}
static void notificador_TempoDecorrido(object sender, EventArgs e)
{
Console.WriteLine("Decorreu o tempo...");
}
}
a) "Iniciando..."
"Começou a contagem..."
"Decorreu o tempo..."
"Finalizou o chamado da função..."
b) "Iniciando..."
"Começou a contagem..."
"Finalizou o chamado da função..."
"Decorreu o tempo..."
c) "Iniciando..."
"Começou a contagem..."
"Finalizou o chamado da função..."
d) "Iniciando..."
"Decorreu o tempo..."
"Começou a contagem..."
"Finalizou o chamado da função..."
e) "Iniciando..."
"Finalizou o chamado da função..."
Questionário elaborado em 05/01/2010 por Renato Ucha
3. F -X C h a n ge F -X C h a n ge
PD PD
!
!
W
W
O
O
N
N
y
y
bu
bu
to
to
k
k
lic
lic
Questionário de pré-avaliação – Programador C#
C
C
w
w
m
m
w w
w
w
o
o
.d o .c .d o .c
c u -tr a c k c u -tr a c k
4. Você acabou de ser contratado para trabalhar com C# na empresa Desafios & Cia Ltda. Ao
chegar na empresa o seu chefe lhe pergunta sobre Arrays. Após explicar o que é e como
funcionam os Arrays, você apresenta um código que exemplifica o que você falou. Sinalize o
código abaixo que você apresentaria para o seu chefe para exemplificar a sua explicação.
a) Point array = new Point();
array.X = 10;
array.Y = 15;
MessageBox.Show("O array atual está nos pontos " + array.X + " e " + array.Y);
b) public class ImplementacaoDeArrays
{
public delegate void Arrays(int Index);
public event Arrays ArrayAtual;
public void RandomizarArray()
{
int indiceRandomico = new Random().Next(100);
this.ArrayAtual(indiceRandomico);
}
}
c) Array nomes = new Array(5);
nomes[1] = "Michele";
nomes[2] = "Letícia";
nomes[3] = "Cleópatra";
nomes[4] = "Marcela";
nomes[5] = "Patrícia";
d) int[] numeros = new int[15] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 };
e) public event EventHandler Array;
5. Você precisa criar uma conexão com banco de dados SQL Server 2000 mas esqueceu-se dos
comandos necessários para criar uma string de conexão. A qual classe você deveria recorrer
para auxiliá-lo na criação da string de conexão?
a) SqlConnectionStringBuilder;
b) SqlServerStringBuilder;
c) StringBuilder;
d) SqlConnection;
e) SqlServerConnection;
Questionário elaborado em 05/01/2010 por Renato Ucha
4. F -X C h a n ge F -X C h a n ge
PD PD
!
!
W
W
O
O
N
N
y
y
bu
bu
to
to
k
k
lic
lic
Questionário de pré-avaliação – Programador C#
C
C
w
w
m
m
w w
w
w
o
o
.d o .c .d o .c
c u -tr a c k c u -tr a c k
6. Considere as tabelas do SQL Server 2005 abaixo:
O seu chefe solicitou que você emita uma relação contendo o nome do autor e os seus livros
publicados, como mostrado abaixo.
Quais os possíveis comandos que você utilizará para obter esse resultado? (informe todos)
a) SELECT Autor.nome, Livro.titulo FROM Livro, Autor WHERE
Livro.id_autor = Autor.id
b) SELECT Nome, Titulo FROM Livro INNER JOIN Autor ON id_autor = id
c) SELECT Nome, Titulo FROM Livro, Autor WHERE Livro.id_autor = Autor.id
d) SELECT Autor.Nome, Livro.titulo FROM Livro INNER JOIN Autor ON
Livro.id_autor = Autor.id
e) SELECT A.Nome, L.Titulo FROM Livro L INNER JOIN Autor A ON
L.id_autor = A.id
7. Considerando que a variável Conexao já existe e representa uma SqlConnection e as
tabelas da questão anterior, o que está errado no código abaixo?
1 SqlCommand commando = new SqlCommand("sp_help", Conexao);
2 commando.CommandType = System.Data.CommandType.StoredProcedure;
3 commando.Parameters.AddWithValue("objname", "Livro");
4
5 DataSet resultado = new DataSet();
6 SqlDataAdapter conector = new SqlDataAdapter(commando);
7 conector.Fill(resultado);
a) É necessário colocar o código Conexao.Open()antes da linha 1 para abrir a conexão;
b) A expressão "objname" na linha 3 não existe, o nome correto é "tablename";
c) Ao invés de DataSet, na linha 4 deveria ser instanciado um DataTable pois somente uma
tabela é retornada pelo comando SQL;
d) Não existem erros no código acima;
e) Na linha 2 o tipo do comando deve ser alterado para System.Data.CommandType.Text;
Questionário elaborado em 05/01/2010 por Renato Ucha
5. F -X C h a n ge F -X C h a n ge
PD PD
!
!
W
W
O
O
N
N
y
y
bu
bu
to
to
k
k
lic
lic
Questionário de pré-avaliação – Programador C#
C
C
w
w
m
m
w w
w
w
o
o
.d o .c .d o .c
c u -tr a c k c u -tr a c k
8. Observe com atenção a classe abaixo:
public class ClasseExemplo
{
public List<object> Dados { get; set; }
public ClasseExemplo()
{
Dados = new List<object>();
}
public List<T> Retornar<T>()
{
List<T> retorno = new List<T>();
foreach (object o in Dados)
{
if (o is T)
retorno.Add((T)o);
}
return retorno;
}
}
Analisando o código abaixo, responda qual o conteúdo das variáveis itens1, itens3 e
itens2 respectivamente:
ClasseExemplo exemplo = new ClasseExemplo();
exemplo.Dados.Add(15d);
exemplo.Dados.Add(18);
exemplo.Dados.Add(25d);
exemplo.Dados.Add("tesoura");
List<string> itens1 = exemplo.Retornar<string>();
List<double> itens2 = exemplo.Retornar<double>();
List<int> itens3 = exemplo.Retornar<int>();
a) tesoura; 15 e 25; 18;
b) tesoura; 18; 15 e 25;
c) Tesoura; 15 e 25; 18;
d) tesoura; 15 e 25; nulo;
e) tesoura; nulo; 15 e 25;
9. A propósito da classe ClasseExemplo da questão anterior. Quais os tipos que podem ser
informados para a função Retornar<T> em substituição ao T?
a) qualquer tipo desde que seja nativo do .NET;
b) qualquer tipo, inclusive aqueles criados pelo desenvolvedor;
c) string, double ou int;
d) qualquer tipo desde que implemente a interface IGeneric;
e) apenas string;
10. Para que serve o decorador [Serializable] utilizado antes da declaração de uma classe?
a) Para indicar que a classe é serializada;
b) Para indicar que a classe deve implementar a interface ISerializable;
c) Para facilitar a leitura do código;
d) Para indicar que o método Clone()está disponível na classe;
e) Para indicar que a classe pode ser serializada;
Questionário elaborado em 05/01/2010 por Renato Ucha