- Les structures en C# sont amusantes
- Brève introduction aux Value Types vs Reference Types
- Initialisation des champs dans les structures
- Comportement des constructeurs dans structures
- Des autres scénarios dans lesquels le comportement des constructeurs de structure peut vous surprendre
- Struct avec des valeurs d'argument par défaut dans les constructeurs, ou, n'êtes-vous pas encore confus ?
- Le modificateur required du C # 11 ne sauvegardera pas votre
c*lemploi. - Structure utilisée comme valeurs d'argument défaut.
- Conclusion (cet post)
- Les structures en C# sont amusantes
- Brève introduction aux Value Types vs Reference Types
- Initialisation des champs dans les structures
- Comportement des constructeurs dans structures
- Des autres scénarios dans lesquels le comportement des constructeurs de structure peut vous surprendre
- Struct avec des valeurs d'argument par défaut dans les constructeurs, ou, n'êtes-vous pas encore confus ?
- Le modificateur required du C # 11 ne sauvegardera pas votre
c*lemploi. - Structure utilisée comme valeurs d'argument défaut.
- Conclusion (cet post)
- Structs in C# are fun
- Brief introduction to Value Types vs Reference Types
- Field initialization in structs
- Constructors and struct behavior
- Other scenarios in which struct constructors behavior may surprise you
- Struct with default argument values in constructors, a.k.a, are you not confused yet?
- required feature from C# 11 will not save your
a**job. - Struct used as default argument values.
- Conclusion. (this post)
- Structs in C# are fun
- Brief introduction to Value Types vs Reference Types
- Field initialization in structs
- Constructors and struct behavior
- Other scenarios in which struct constructors behavior may surprise you
- Struct with default argument values in constructors, a.k.a, are you not confused yet?
- required feature from C# 11 will not save your
a**job. - Struct used as default argument values.
- Conclusion. (this post)
- Structs em C# são divertidas
- Breve introdução a Tipos de Valor vs Tipos de Referência
- Inicialização de campos em structs
- Construtores e comportamento das structs
- Outros cenários nos quais o comportamento dos construtores de structs pode te surpreender
- Struct com valores padrão para argumentos nos construtores, ou seja, você não está confuso ainda?
- A funcionalidade required do C# 11 não vai salvar seu
c**emprego. - Struct usada como valores padrão para argumentos.
- Conclusão. (este post)
- Structs em C# são divertidas
- Breve introdução a Tipos de Valor vs Tipos de Referência
- Inicialização de campos em structs
- Construtores e comportamento das structs
- Outros cenários nos quais o comportamento dos construtores de structs pode te surpreender
- Struct com valores padrão para argumentos nos construtores, ou seja, você não está confuso ainda?
- A funcionalidade required do C# 11 não vai salvar seu
c**emprego. - Struct usada como valores padrão para argumentos.
- Conclusão. (este post)
Em um post anterior examinamos o uso de parâmetros com valores default em construtores de structs; desta vez, vamos dar uma olhada rápida no que acontece quando temos parâmetros do tipo struct com valores default. Então, sem mais delongas, vamos começar com a seguinte struct1:
e o seguinte uso:
Qual saída você espera obter?
Se você tem acompanhado esta série de posts provavelmente notou que esta é uma pergunta capciosa e que nem 42 nem 13 são respostas corretas uma vez que para que tais valores pudessem ser impressos isso exigiria que o inicializador de campo e/ou o construtor fossem executados, mas a expressão new S()
usada como valor default em parâmetros
não implica uma invocação de construtor (afinal, não há um construtor sem parâmetros e, caso você esteja tentado a adicionar um, o compilador emitirá um erro, pois, na presença de tal construtor, a expressão em questão não representa mais uma constante de tempo de compilação, portanto, não pode ser usada como um valor default).
Na realidade, quando executado o trecho de código exibirá 0
pois o compilador simplesmente inicializa a memória usada para armazenar a instância da struct com zeros (0
). Por outro lado, se você invocar o método M()
como a seguir2:
o compilador emitirá código para executar o construtor e o inicializador de campo e 13
será impresso, mas isso não tem mais nada a ver com o valor de parâmetro padrão
.
E com isso exploramos o último comportamento não tão intuitivo
de estruturas que pretendíamos abordar; o próximo post será a conclusão desta série.
Como sempre, todos os comentários são bem-vindos.
Divirta-se!