Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Erros e avisos associados a tipos
- CS8343:
ref structsnão podem implementar interfaces - CS8344: a instrução
foreachnão pode operar em enumeradores em métodos assíncronos ou iteradores porque o tipo é umref structou um parâmetro de tipo que permiteref struct. - CS8345: a propriedade de campo ou implementada automaticamente não pode ser do tipo, a menos que seja um membro de instância de um
ref struct. - CS9048: o modificador
scopedpode ser usado somente para refs e valoresref struct. - CS9050: um campo
refnão pode se referir a umref struct. - CS9059: um campo ref só pode ser declarado em um ref struct.
- CS9241: 'ref struct' já está especificado.
- CS9242: a cláusula de restrição 'allows' precisa ser a última restrição especificada.
- CS9243: não é possível permitir que ref structs para um parâmetro de tipo conhecido de outras restrições sejam uma classe.
- CS9244: o tipo pode não ser um
ref structou um parâmetro de tipo que permite ref structs para usá-lo como parâmetro no tipo ou método genérico. - CS9245: o tipo não pode implementar o membro da interface para o tipo
ref struct. - CS9246: não é possível acessar um membro de interface de instância não virtual em um parâmetro de tipo que permita o ref struct.
- CS9247: a instrução foreach não pode operar em enumeradores do tipo porque é um parâmetro de tipo que permite o ref struct e não é conhecido no tempo de compilação para implementar
IDisposable. - CS9267: O tipo de elemento de um iterador pode não ser um ref struct ou um parâmetro de tipo que permite ref structs
violações de segurança de ref
- CS8345: a propriedade de campo ou implementada automaticamente não pode ser do tipo, a menos que seja um membro de instância de um
ref struct. - CS9048: o modificador
scopedpode ser usado somente para refs e valoresref struct. - CS9050: um campo
refnão pode se referir a umref struct. - CS9059: um campo
refsó pode ser declarado em umref struct.
Um tipo ref struct pode incluir campos ref. Outros tipos não podem incluir campos ref. O compilador impõe restrições às declarações e ao uso de tipos ref struct para impor regras de segurança ref em instâncias de qualquer tipo ref struct:
- Somente
ref structos tipos podem conter propriedades implementadasrefautomaticamente. - Somente tipos
ref structou variáveisrefpodem ter o modificadorscoped. - Um campo
refsó pode ser declarado em um tiporef struct. - Um campo
refnão pode se referir a um tiporef struct
Violar qualquer uma dessas regras produz um dos erros listados. Se você pretendia usar esse recurso de linguagem de programação, converta o tipo em um ref struct. Caso contrário, remova o constructo não permitido.
implementações da interface ref struct
- CS8343:
ref structsnão pode implementar interfaces - CS8344: a instrução
foreachnão pode operar em enumeradores em métodos assíncronos ou iteradores porque o tipo é umref structou um parâmetro de tipo que permiteref struct. - CS9241: 'ref struct' já está especificado.
- CS9242: a cláusula de restrição 'allows' precisa ser a última restrição especificada.
- CS9243: não é possível permitir que ref structs para um parâmetro de tipo conhecido de outras restrições sejam uma classe.
- CS9244: o tipo pode não ser um
ref structou um parâmetro de tipo que permite ref structs para usá-lo como parâmetro no tipo ou método genérico. - CS9245: o tipo não pode implementar o membro da interface para o tipo
ref struct. - CS9246: não é possível acessar um membro de interface de instância não virtual em um parâmetro de tipo que permita o ref struct.
- CS9247: a instrução foreach não pode operar em enumeradores do tipo porque é um parâmetro de tipo que permite o ref struct e não é conhecido no tempo de compilação para implementar
IDisposable. - CS9267: O tipo de elemento de um iterador pode não ser um ref struct ou um parâmetro de tipo que permite ref structs
Antes do C# 13, os tipos ref struct não podem implementar interfaces; o compilador gera CS8343. Com o C# 13 e posteriores, os tipos ref struct podem implementar interfaces, sujeitos às seguintes regras:
- Não é possível converter um
ref structem uma instância de uma interface que ele implementa. Esta restrição inclui a conversão implícita quando você usa um tiporef structcomo argumento quando o parâmetro é um tipo de interface. A conversão resulta em uma conversão de boxing, que viola a segurança de ref. - Um
ref structque implementa uma interface deve implementar todos os membros da interface. Oref structdeve implementar membros em que a interface inclua uma implementação padrão.
A partir do C# 13, um ref struct pode ser usado como um argumento de tipo para um parâmetro de tipo genérico, se e somente se o parâmetro de tipo genérico tiver a antirrestrição allows ref struct. Ao usar a antirrestrição allows ref struct, você precisa seguir estas regras:
- Um
ref structé usado como um argumento de tipo, o parâmetro de tipo precisa ter a antirrestriçãoallows ref struct.– A antirrestriçãoallows ref structprecisa ser a última na cláusulawherepara esse parâmetro - Usos de instâncias em que o parâmetro de tipo precisa obedecer às regras de segurança de ref.
- Um
ref structargumento ou um tipo que pode ser umref structtipo não pode ser usado como o tipo de elemento para um método iterador.