Partilhar via


Design de Estruturas

Observação

Este conteúdo é reimpresso com permissão da Pearson Education, Inc., a partir de Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition. Essa edição foi publicada em 2008 e, desde então, o livro foi totalmente revisto na terceira edição. Algumas das informações nesta página podem estar desatualizadas.

O tipo de valor de uso geral é mais frequentemente referido como "struct", a palavra-chave em C#. Esta seção fornece diretrizes para o projeto geral da estrutura.

❌ NÃO forneça um construtor sem parâmetros para uma struct.

Seguir esta diretriz permite que matrizes de structs sejam criadas sem ter que executar o construtor em cada item da matriz. Observe que o C# não permite que structs tenham construtores sem parâmetros.

❌ NÃO defina tipos de valores mutáveis.

Os tipos de valores mutáveis têm vários problemas. Por exemplo, quando um acessador de propriedade retorna um tipo de valor, o chamador recebe uma cópia. Como a cópia é criada implicitamente, os desenvolvedores podem não estar cientes de que estão mutando a cópia, e não o valor original. Além disso, algumas linguagens (linguagens dinâmicas, em particular) têm problemas ao usar tipos de valores mutáveis porque mesmo variáveis locais, quando desreferenciadas, fazem com que uma cópia seja feita.

✔️ CERTIFIQUE-SE de que um estado em que todos os dados da instância estão definidos como zero, false ou null (quando apropriado) é válido.

Isso evita a criação acidental de instâncias inválidas quando uma matriz das estruturas é criada.

✔️ DO implementar IEquatable<T> em tipos de valor.

O método Object.Equals em tipos de valor causa encaixotamento, e a sua implementação padrão não é muito eficiente, porque usa reflexão. Equals pode ter um desempenho muito melhor e pode ser implementado para que não cause boxe.

❌ NÃO estenda ValueType explicitamente. Na verdade, a maioria das línguas impede isso.

Em geral, as estruturas podem ser muito úteis, mas só devem ser usadas para valores pequenos, únicos e imutáveis que não serão encaixotados com frequência.

© Trechos 2005, 2009 Microsoft Corporation. Todos os direitos reservados.

Reimpresso com permissão da Pearson Education, Inc., a partir de Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition por Krzysztof Cwalina e Brad Abrams, publicado em 22 de outubro de 2008 pela Addison-Wesley Professional como parte da Microsoft Windows Development Series.

Ver também