Compartilhar via


Design de Struct

Observação

Este conteúdo é reimpresso com permissão da Pearson Education, Inc. 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 revisado na terceira edição. Algumas das informações nesta página podem estar desatualizadas.

O tipo de valor de uso geral é geralmente chamado de struct, sua palavra-chave em C#. Esta seção fornece diretrizes para design geral de struct.

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

Seguir essa diretriz permite que matrizes de structs sejam criadas sem precisar 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 mutáveis de valor.

Tipos de valor 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 alterando 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 valor mutáveis porque até mesmo variáveis locais, quando desreferenciadas, fazem com que uma cópia seja feita.

✔️ VERIFIQUE se um estado em que todos os dados da instância estão definidos como zero, falsos ou nulos (conforme apropriado) é válido.

Isso impede a criação acidental de instâncias inválidas quando uma matriz dos structs é criada.

✔️ Implemente IEquatable<T> nos tipos de valor.

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

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

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

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

Reimpresso com permissão da Pearson Education, Inc. das Diretrizes de Design do Framework: convenções, linguagens e padrões para bibliotecas do .NET reutilizável, 2ª edição por Krzysztof Cwalina e Brad Abrams, publicado em 22 de outubro de 2008 por Addison-Wesley Professional como parte da série de desenvolvimento do Microsoft Windows.

Confira também