Partilhar via


Projeto Struct

Nota

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 um struct, sua palavra-chave 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 getter 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.

✔️ FAÇA verifique se um estado em que todos os dados da instância estão definidos como zero, false ou null (conforme 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 Object.Equals método em tipos de valor causa boxe, e 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 ValueTypeexplicitamente o . 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.

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

Reimpresso com permissão da Pearson Education, Inc., 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 por Addison-Wesley Professional como parte da Microsoft Windows Development Series.

Consulte também