Quando usar struct em vez de class em C#: entendendo tipos de valor e tipos de referência
Olá a todos! Escrevo em C# há cerca de um ano e sempre me pergunto: quando devo usar struct e quando class? Acho que entendo a diferença — struct é um tipo de valor, e class é um tipo de referência. Mas na prática, muitas vezes fico confuso.
Por exemplo, tenho este código:
```csharp
public class PointClass
{
public int X { get; set; }
public int Y { get; set; }
public PointClass(int x, int y) { X = x; Y = y; }
}
public struct PointStruct
{
public int X { get; set; }
public int Y { get; set; }
public PointStruct(int x, int y) { X = x; Y = y; }
}
```
Ambos parecem fazer a mesma coisa. Mas li que struct é mais rápido para objetos pequenos, porque são armazenados na stack, enquanto class fica na heap. Por outro lado, ouvi dizer que struct não deve ser usado com collections, LINQ ou async, porque começam a ser copiados de um lado para o outro e a performance cai.
Também não entendo por que em struct não é possível declarar um construtor sem parâmetros.