C# vs java

Disponível somente no TrabalhosFeitos
  • Páginas : 6 (1287 palavras )
  • Download(s) : 0
  • Publicado : 17 de setembro de 2012
Ler documento completo
Amostra do texto
C# vs Java
1 – Properties
Propriedades permitem eliminar a sintaxe incômoda dos gets e sets, sem eliminar sua funcionalidade. Por exemplo:
class Vector2D
{
float x;

public float X
{
get { return x; }
set
{
if (value == null) throw new Exception("não pode ser nulo");
x = value;}
}

public float Y { get; set; } // ou simplesmente public float Y;
}

Agora podemos simplesmente usar a classe assim:
Vector2D ponto = new Vector2D();

ponto.X = 10;
ponto.Y = ponto.X; //Ponto.Y agora vale 10

2 - Sobrecarga de operadores
No C#, você pode fazer com que uma classe funcione com operadores como +, -, * e/.
O mesmo pode ser feito para classes matemáticas, e classes representando tipos numéricos (como BigInteger e BigDecimal). Compare o código da classe Vector2D feito em Java e em C#:
Vector2D v1 = new Vector2D(10, 20);
Vector2D v2 = new Vector2D(20, 50);
Vector2D v3 = new Vector2D(20, 50);

//Conta em C#
Vector2D v = 5 * (v1 - v2 /2) + v3;
//Conta em Java
Vector2D v = v1.subtract(v2.divide(2)).multiply(5).add(v3);

//Conta podemos usar +=, -=, *= ou /=
Vector2D v += new Vector2D(10, 20);

Note que no Java a multiplicação por 5 teve obrigatoriamente de ser invertida, pois o número 5 não teria o método multiply. Sorte que a operação é comutativa.


Como é implementado asobrecarga
class Vector2D
{
public Vector2D(float x, float y) { X = x; Y = y; }

public float X { get; set; }
public float Y { get; set; }

public static Vector2D operator +(Vector2D v1, Vector2D v2)
{
return new Vector2D(v1.X + v2.Y, v1.Y + v2.Y);
}

. . .

public static bool operator ==(Vector2D v1,Vector2D v2)
{
if (v1.X == v2.Y && v1.Y == v2.Y) return true;
return false;
}
}

Note que agora podemos usar o operador == para classe Vector2D

3 - Indexers
Indexadores são uma conveniência sintática que permite você criar um class, struct, ou interface que aplicações cliente podem acessar como se fossem um array. Indexadores são mais frequentementeimplementados em tipos cujo objetivo principal é encapsular uma coleção interna ou array.
IList lista = new List();

lista.Add("str0");
string s = lista[0];

A lista é acessada como se fosse um array.









4 - Extension methods
Permite que você associe a uma classe um método, mesmo que você não possua seu fonte. Isso só é possível se ométodo só faz uso da parte pública da classe.
Por exemplo, digamos que você não tenha o código-fonte da classe Vector2, mas queira extender um método ToPoint(), no C# ficaria assim.
static class Vector2Complements
{
public static Point ToPoint(this Vector2 vetor) //this para extender
{
return new Point((int)vetor.X, (int)vetor.Y);
}
}

Edepois
//Em c#
Point ponto = vet.ToPoint();
//Em java
Point ponto = Vector2Complements.ToPoint(vet);



5 - LINQ
Vamos dizer que em Java você tenha um List, contendo a classe Fruta, que tem no seu atributo nome: "Abóbora", "Limão", "Abóbora", "Maçã", "Pêra", "Caqui", "Limão", "Melância", "Amora".
E para cada um o preço.

E que vocêqueira gerar um outro List, com o nome de todas as frutas que custam menos de R$5,00, sem repetição de nomes, em ordem reversa. Como você faria?

Em java, isso seria a seguinte tarefa tediosa:
1. Criar um TreeSet, usando o String.ReverseComparator como entrada
2. Percorrer a lista de frutas, fazendo um if para localizar todas que custam menos de 10 e copia-las no TreeSet
3. Copiar o TreeSet...
tracking img