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 a sobrecarga 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,