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.
Este artigo aborda os seguintes erros do compilador:
- CS0132: 'construtor': um construtor estático deve ser sem parâmetros.
- CS0514: o construtor estático não pode ter uma chamada explícita ao construtor 'this' ou 'base'.
- CS0515: modificadores de acesso não são permitidos em construtores estáticos.
- CS0516: Construtor 'constructor' não pode chamar a si mesmo
- CS0517: 'class' não tem classe base e não pode chamar um construtor base.
- CS0522: structs não podem chamar construtores de classe base.
- CS0526: as interfaces não podem conter construtores de instância.
- CS0568: Structs não podem conter construtores explícitos sem parâmetros.
- CS0573: 'declaração de campo': não é possível ter inicializadores de campo de instância em structs.
- CS0710: classes estáticas não podem ter construtores de instância.
- CS0768: O construtor não pode chamar a si mesmo por meio de outro construtor.
- CS1018: Palavra-chave 'this' ou 'base' esperada.
- CS8054: Enums não podem conter construtores explícitos sem parâmetros.
- CS8091: não pode ser externo nem ter um inicializador de construtor.
- CS8358: não é possível usar o construtor de atributos porque ele tem parâmetros 'in' ou 'ref readonly'.
- CS8813: Um inicializador de módulo deve ser um método de membro comum
- CS8814: O método 'method' do inicializador de módulo deve estar acessível no nível do módulo
- CS8815: o método 'method' do inicializador de módulo deve ser estático e não virtual, não deve ter parâmetros e deve retornar 'void'
- CS8816: o método 'method' do inicializador de módulo não deve ser genérico e não deve ser contido em um tipo genérico
- CS8861: lista de argumentos inesperados.
- CS8862: Um construtor declarado em um tipo com uma lista de parâmetros deve ter o inicializador do construtor 'this'.
- CS8867: Nenhum construtor de cópia acessível encontrado no tipo base '{0}'.
- CS8868: Um construtor de cópia em um registro deve chamar um construtor de cópia da base ou um construtor de objeto sem parâmetros se o registro herdar do objeto.
- CS8878: Um construtor de cópia '{0}' deve ser público ou protegido porque o registro não está lacrado.
- CS8900: O inicializador de módulo não pode ser atribuído com 'UnmanagedCallersOnly'.
- CS8901: 'method' tem o atributo 'UnmanagedCallersOnly' e não pode ser chamado diretamente. Obtenha um ponteiro de função para esse método.
- CS8902: 'method' está marcado como 'UnmanagedCallersOnly' e não pode ser convertido em um tipo de delegado. Obtenha um ponteiro de função para esse método.
- CS8910: O construtor primário entra em conflito com o construtor de cópia sintetizado.
- CS8958: O construtor de struct sem parâmetros deve ser "público".
- CS8982: Um construtor declarado em um 'struct' com lista de parâmetros deve ter um inicializador 'this' que chame o construtor primário ou um construtor declarado explicitamente.
- CS8983: Um 'struct' com inicializadores de campo deve incluir um construtor declarado explicitamente.
- CS9105: Não é possível usar o parâmetro de construtor primário neste contexto.
- CS9106: O identificador é ambíguo entre tipo e parâmetro nesse contexto.
- CS9108: Não é possível usar um parâmetro do tipo semelhante a referência dentro de um método anônimo, expressão lambda, expressão de consulta ou função local.
-
CS9109: Não é possível usar
ref,outouinparâmetro de construtor primário dentro de um membro da instância. - CS9110: Não é possível usar o parâmetro de construtor primário que tenha o tipo ref-like dentro de um membro de instância.
- CS9111: métodos anônimos, expressões lambda, expressões de consulta e funções locais dentro de um membro de instância de um struct não podem acessar o parâmetro do construtor primário.
- CS9112: métodos anônimos, expressões lambda, expressões de consulta e funções locais dentro de um struct não podem acessar o parâmetro de construtor primário também usado dentro de um membro de instância.
- CS9114: Um parâmetro de construtor primário de um tipo somente leitura não pode receber uma atribuição (exceto no setter somente inicialização do tipo ou em um inicializador de variável).
- CS9115: Um parâmetro de construtor primário de um tipo somente leitura não pode ser retornado por referência gravável.
- CS9116: um parâmetro de construtor primário de um tipo somente leitura não pode ser usado como um valor ref ou out (exceto no setter somente inicialização do tipo ou em um inicializador de variável).
- CS9117: Membros de um parâmetro de construtor primário de um tipo somente leitura não podem ser modificados (exceto no setter somente inicialização do tipo ou em um inicializador de variável).
- CS9118: Membros do parâmetro de construtor primário de um tipo somente leitura não podem ser retornados por referência gravável.
-
CS9119: Membros do parâmetro de construtor primário de um tipo somente leitura não podem ser usados como valor
refouout(exceto no setter somente inicialização do tipo ou em um inicializador de variável). - CS9120: Não é possível retornar o parâmetro do construtor primário por referência.
- CS9121: O parâmetro de construtor primário de struct do tipo causa um ciclo no layout do struct.
- CS9122: lista de parâmetros inesperados.
- CS9136: não é possível usar o parâmetro de construtor primário do tipo dentro de um membro de instância.
Além disso, os seguintes avisos são abordados neste artigo:
- CS0824: O construtor 'name' está marcado como externo.
- CS9107: o parâmetro é capturado no estado do tipo delimitador e o valor dele também é transmitido para o construtor base. O valor também pode ser capturado pela classe base.
- CS9113: o parâmetro não foi lido.
- CS9124: Parameter é capturado no estado do tipo delimitante e seu valor também é usado para inicializar um campo, uma propriedade ou um evento.
- CS9179: o parâmetro do construtor primário é sombreado por um membro da base
- CS9018: A propriedade implementada automaticamente é lida antes de ser atribuída explicitamente, causando uma atribuição implícita anterior de "padrão".
- CS9019: O campo é lido antes de ser atribuído explicitamente, causando uma atribuição implícita anterior de "padrão".
- CS9020: o objeto 'this' é lido antes de todos os campos serem atribuídos, causando atribuições implícitas anteriores de 'padrão' a campos não atribuídos explicitamente.
- CS9021: o controle é retornado ao chamador antes que a propriedade implementada automaticamente seja atribuída explicitamente, causando uma atribuição implícita anterior de "padrão".
- CS9022: o controle é retornado ao chamador antes que o campo seja atribuído explicitamente, causando uma atribuição implícita anterior de "padrão".
Construtores estáticos
- CS0132: 'construtor': um construtor estático deve ser sem parâmetros.
- CS0514: o construtor estático não pode ter uma chamada explícita ao construtor 'this' ou 'base'.
- CS0515: modificadores de acesso não são permitidos em construtores estáticos.
Construtores estáticos inicializam dados estáticos para um tipo. Para obter mais informações, consulte construtores estáticos.
Para corrigir esses erros, verifique se a declaração do construtor estático segue estas regras:
- Remova todos os parâmetros da declaração de construtor estático, pois um construtor estático deve ser sem parâmetros (CS0132). Se você precisar passar valores de inicialização, considere o uso de campos estáticos ou propriedades definidas antes da execução do construtor estático.
- Remova todos os modificadores de acesso, como
public,protectedouprivateinternaldo construtor estático, porque o runtime controla quando o construtor estático é executado e modificadores de acesso não são significativos (CS0515). - Remova quaisquer
: base()ou: this()chamadas a inicializadores de construtor do construtor estático, pois os construtores estáticos não podem ser encadeados a outros construtores (CS0514). O runtime invoca automaticamente o construtor estático da classe base se houver um.
Declaração do construtor
- CS0526: as interfaces não podem conter construtores de instância.
- CS0710: classes estáticas não podem ter construtores de instância.
- CS8054: Enums não podem conter construtores explícitos sem parâmetros.
- CS8358: não é possível usar o construtor de atributos porque ele tem parâmetros 'in' ou 'ref readonly'.
- CS8091: um construtor não pode ser externo nem ter um inicializador de construtor.
Você pode declarar construtores somente dentro class e struct tipos, incluindo record class e record struct tipos. Para obter mais informações, consulte Construtores de instância.
Para corrigir esses erros, tente as seguintes sugestões:
- Mova o construtor para um tipo
classoustruct, porque você não pode declarar construtores nos tiposinterfaceouenum(CS0526, CS8054). As interfaces definem contratos, mas não fornecem lógica de inicialização e os tipos de enumeração têm seus valores definidos em tempo de compilação. - Remova construtores de instância de classes estáticas, pois as classes estáticas não podem ser instanciadas e, portanto, não podem ter construtores de instância (CS0710). Se você precisar de lógica de inicialização, use um construtor estático.
- Altere os parâmetros
inouref readonlypara serem pass-by-value em construtores de atributo, pois os construtores de atributo não dão suporte a modificadores de parâmetroinouref readonly(CS8358). O runtime instancia atributos usando reflexão, que não dá suporte ao modificadorinouref readonly. - Remova o
: base()inicializador ou: this()construtor de umexternconstrutor, pois construtores externos não podem ser encadeados a outros construtores (CS8091). A implementação de um construtor extern é fornecida externamente, portanto, o encadeamento de construtores não é possível.
O aviso a seguir pode ser gerado para declarações de construtor:
- CS0824: o construtor está marcado como externo.
Quando um construtor é marcado extern, o compilador não pode verificar se existe uma implementação. Para suprimir esse aviso, forneça uma implementação não externa ou certifique-se de que a implementação externa esteja corretamente vinculada.
Construtores em tipos de struct
- CS0568: Structs não podem conter construtores explícitos sem parâmetros.
- CS0573: 'declaração de campo': não é possível ter inicializadores de campo de instância em structs.
- CS8958: O construtor de struct sem parâmetros deve ser "público".
- CS8982: Um construtor declarado em um 'struct' com lista de parâmetros deve ter um inicializador 'this' que chame o construtor primário ou um construtor declarado explicitamente.
- CS8983: Um 'struct' com inicializadores de campo deve incluir um construtor declarado explicitamente.
Os tipos de struct têm regras específicas para construtores e inicialização de campos. Para obter mais informações, consulte a seção inicialização do Struct e valores padrão do artigo Tipos de estrutura .
Para corrigir esses erros, tente as seguintes sugestões:
- Atualize para c# 10 ou posterior se você encontrar CS0568 ou CS0573, pois esses erros ocorrem apenas em versões mais antigas do C#. O C# moderno permite construtores sem parâmetros explícitos e inicializadores de campo em structs.
- Adicione o modificador de acesso
publica qualquer construtor de estrutura sem parâmetros, pois esses construtores devem ser públicos para garantir que a expressãodefaulte a alocação da matriz possam inicializar corretamente as instâncias da estrutura (CS8958). - Adicione um
: this(...)inicializador a construtores declarados explicitamente em uma estrutura que tenha um construtor primário, pois todos os construtores que não são sem parâmetros devem se encadear ao construtor primário ou a outro construtor explicitamente declarado para garantir a inicialização consistente (CS8982). - Declare um construtor explícito quando o struct usa inicializadores de campo, pois o compilador requer um construtor explícito para garantir que os inicializadores de campo sejam invocados (CS8983). Esse construtor pode ser um construtor sem parâmetros com um corpo vazio.
Os avisos a seguir indicam que um campo ou propriedade não é atribuído explicitamente antes de ser lido ou antes de o controle retornar ao chamador:
- CS9018: A propriedade implementada automaticamente é lida antes de ser atribuída explicitamente, causando uma atribuição implícita anterior de "padrão".
- CS9019: O campo é lido antes de ser atribuído explicitamente, causando uma atribuição implícita anterior de "padrão".
- CS9020: o objeto 'this' é lido antes de todos os campos serem atribuídos, causando atribuições implícitas anteriores de 'padrão' a campos não atribuídos explicitamente.
- CS9021: o controle é retornado ao chamador antes que a propriedade implementada automaticamente seja atribuída explicitamente, causando uma atribuição implícita anterior de "padrão".
- CS9022: o controle é retornado ao chamador antes que o campo seja atribuído explicitamente, causando uma atribuição implícita anterior de "padrão".
Para silenciar esses avisos, atribua explicitamente todos os campos e propriedades implementadas automaticamente antes de lê-los ou antes que o controle retorne do construtor (CS9018, CS9019, CS9020, CS9021, CS9022). Quando membros não atribuídos são lidos, o compilador atribui default implicitamente a eles, o que pode não ser o comportamento pretendido.
Chamadas de construtor com base e this
- CS0516: O construtor não pode chamar a si mesmo.
- CS0517: 'class' não tem classe base e não pode chamar um construtor base.
- CS0522: structs não podem chamar construtores de classe base.
- CS0768: O construtor não pode chamar a si mesmo por meio de outro construtor.
- CS1018: Palavra-chave 'this' ou 'base' esperada.
Usando inicializadores de construtor, um construtor pode chamar outro construtor usando : this() ou : base(). Para obter mais informações, consulte Como usar construtores.
Para corrigir esses erros, tente as seguintes sugestões:
- Interrompa quaisquer cadeias circulares de chamadas de construtores, pois um construtor não pode chamar a si mesmo, seja diretamente ou indiretamente por meio de outro construtor (CS0516, CS0768). Certifique-se de que o encadeamento de construtores termine, no final, em um construtor que não chame outro construtor do mesmo tipo.
- Remova o inicializador
: base()de construtores em tipos de struct ou de System.Object, pois esses tipos não têm um construtor de classe base para chamar (CS0517, CS0522). Tipos de struct herdam implicitamente, System.ValueTypemas você não pode chamar explicitamente seu construtor. - Conclua o inicializador do construtor ou remova o dois-pontos (
:) da declaração do construtor, pois quando um dois-pontos segue uma assinatura de construtor, o compilador esperathis()oubase()(CS1018). Adicione a chamada ao construtor apropriada ou remova completamente os dois pontos, caso não se pretenda realizar o encadeamento.
Registros e construtores de cópia
- CS8867: Nenhum construtor de cópia acessível foi encontrado no tipo base.
- CS8868: Um construtor de cópia em um registro precisa chamar um construtor de cópia da base, ou um construtor de objeto sem parâmetros se o registro herdar do objeto.
- CS8878: Um construtor de cópia precisa ser público ou protegido porque o registro não está selado.
- CS8910: O construtor primário entra em conflito com o construtor de cópia sintetizado.
Em um tipo de registro derivado, o seu construtor de cópia explícito deve chamar o construtor de cópia do tipo base usando o inicializador : this(). Se o registro herda diretamente de System.Object, pode chamar o construtor de objeto sem parâmetros (CS8868).
Os registros incluem um construtor de cópia sintetizado pelo compilador. Você pode escrever um construtor de cópia explícito, mas ele deve atender a requisitos específicos. O compilador gera erros quando construtores de cópia de registro violam estes requisitos:
- O tipo base deve ter um construtor de cópia acessível. Todos os
recordtipos têm um construtor de cópia. Verifique se o tipo base é umrecordou adicione um construtor de cópia acessível a ele (CS8867). - Em um tipo de registro derivado, o seu construtor de cópia explícito deve chamar o construtor de cópia do tipo base usando o inicializador
: base(). Se o registro herda diretamente de System.Object, pode chamar o construtor de objeto sem parâmetros (CS8868). - Construtores de cópia devem ser
publicouprotecteda menos que o tipo de registro sejasealed. Adicione o modificador de acesso apropriado ao construtor de cópia (CS8878). - Se o construtor de cópia explícita tiver a mesma assinatura que o construtor de cópia sintetizado, as definições entrarão em conflito. Remova o construtor de cópia explícito ou modifique sua assinatura (CS8910).
Declarações de inicializador de módulo
- CS8813: um inicializador de módulo deve ser um método de membro comum.
- CS8814: O método 'method' do inicializador de módulo deve estar acessível no nível do módulo.
- CS8815: o método 'method' do inicializador de módulo deve ser estático e não virtual, não deve ter parâmetros e deve retornar 'void'.
- CS8816: o método 'method' do inicializador de módulo não deve ser genérico e não deve ser contido em um tipo genérico.
- CS8900: O inicializador de módulo não pode ser atribuído com 'UnmanagedCallersOnly'.
- CS8901: 'method' é marcado com 'UnmanagedCallersOnly' e não pode ser chamado diretamente. Obtenha um ponteiro de função para este método.
- CS8902: 'method' está marcado como 'UnmanagedCallersOnly' e não pode ser convertido em um tipo de delegado. Obtenha um ponteiro de função para esse método.
Esses erros impõem os requisitos para métodos marcados com ModuleInitializerAttribute. Os inicializadores de módulo são executados automaticamente quando um assembly é carregado pela primeira vez, antes que qualquer outro código no módulo seja executado. Para obter as regras completas, consulte inicializadores de módulo.
Para corrigir esses erros, aplique uma das seguintes alterações com base no diagnóstico específico:
- Verifique se o método marcado com
[ModuleInitializer]é um método comum, não um acessador de propriedade, acessador de eventos, função local, lambda, construtor, destruidor ou operador (CS8813). O compilador só pode tratar uma declaração de método comum como um destino válido para a infraestrutura do inicializador de módulo. - Torne o método inicializador do módulo e todos os seus tipos que contêm `
internal` ou `public` para que o método esteja acessível fora do tipo de nível superior (CS8814). O tempo de execução precisa chamar o método a partir do código gerado no nível do módulo, o que requer acesso nesse nível. - Declare o método inicializador de módulo como
static, não virtual, sem parâmetros e com umvoidtipo de retorno (CS8815). O runtime chama inicializadores de módulo sem argumentos e descarta o resultado, portanto, a assinatura do método deve corresponder exatamente a essas restrições. - Remova parâmetros de tipo genérico do método inicializador de módulo e mova o método para fora de qualquer tipo de contenção genérico (CS8816). O runtime não pode determinar quais argumentos de tipo fornecer ao invocar o inicializador, portanto, métodos genéricos e métodos em tipos genéricos não são permitidos.
- Remova o UnmanagedCallersOnlyAttribute do método inicializador do módulo (CS8900). Os inicializadores de módulo são chamados pela infraestrutura de runtime gerenciado, portanto, eles não podem ser restritos somente a chamadores não gerenciados.
- Obtenha um ponteiro de função em vez de chamar diretamente um método marcado com
[UnmanagedCallersOnly](CS8901). Métodos atribuídos com UnmanagedCallersOnlyAttribute não podem ser chamados do código gerenciado. Use o operador¶ obter um ponteiro de função (delegate* unmanaged<...>) no contextounsafe, e passe o ponteiro para o código não gerenciado. Se o projeto ainda não permitir código não seguro, habiliteAllowUnsafeBlocks. - Obtenha um ponteiro de função em vez de converter um método marcado com
[UnmanagedCallersOnly]para um tipo de delegado (CS8902). Métodos atribuídos com UnmanagedCallersOnlyAttribute não podem ser representados como delegados gerenciados porque a convenção de chamada é incompatível. Em vez disso, use ponteiros de função (delegate* unmanaged<...>) em um contextounsafe. Se o projeto ainda não permitir código não seguro, habiliteAllowUnsafeBlocks.
Para obter mais informações, consulte ModuleInitializerAttribute e UnmanagedCallersOnlyAttribute.
Declaração de construtor primário
Construtores primários declaram parâmetros diretamente na declaração de tipo. O compilador sintetiza um campo para armazenar um parâmetro de construtor primário quando você o usa em membros ou inicializadores de campo.
Encadeamento do construtor
- CS8861: Lista de argumentos inesperados.
- CS8862: Um construtor declarado em um tipo com lista de parâmetros precisa ter o inicializador de construtor 'this'.
- CS9122: Lista de parâmetros inesperada.
Quando um tipo tem um construtor primário, todos os outros construtores declarados explicitamente devem encadeá-lo usando : this(...).
Para corrigir esses erros, tente as seguintes sugestões:
- Adicione um
: this(...)inicializador que passe argumentos apropriados para o construtor primário, pois todos os construtores declarados explicitamente devem ser encadeados ao construtor primário (CS8862). - Remova uma lista de parâmetros da referência de tipo base quando o tipo base não tiver um construtor primário, pois a sintaxe
class Derived : Base(args)só é válida quandoBasetem um construtor primário (CS8861). - Remova uma lista de parâmetros do construtor primário de uma declaração
interface, pois as interfaces não podem ter construtores primários (CS9122).
Uso de parâmetro em chamadas de construtor base
- CS9105: Não é possível usar o parâmetro de construtor primário neste contexto.
- CS9106: O identificador é ambíguo entre tipo e parâmetro nesse contexto.
Você só poderá usar parâmetros de construtor primário na chamada do construtor base se passá-los como parte da declaração do construtor primário.
Para corrigir esses erros, tente as seguintes sugestões:
- Mova o uso do parâmetro para a cláusula base da declaração de tipo em vez de usá-lo em uma chamada de construtor
: base()explicitamente declarada, pois os parâmetros do construtor primário só podem aparecer na cláusula base da declaração de tipo (CS9105). - Renomeie o tipo ou o parâmetro quando um tipo e um parâmetro de construtor primário compartilharem o mesmo nome, pois a referência se torna ambígua (CS9106).
Parâmetros de tipo ref-like
- CS9108: Não é possível usar parâmetro que tenha tipo ref dentro de um método anônimo, expressão lambda, expressão de consulta ou função local.
-
CS9109: Não é possível usar
ref,outouinparâmetro de construtor primário dentro de um membro da instância. - CS9110: Não é possível usar o parâmetro de construtor primário que tem um tipo semelhante a ref dentro de um membro de instância.
- CS9136: não é possível usar o parâmetro de construtor primário do tipo dentro de um membro de instância.
Para resolver estes erros:
- Os parâmetros de construtor primário do
ref structtipo têm restrições sobre onde você pode usá-los. Mova o acesso de parâmetro para fora de expressões lambda, expressões de consulta ou funções locais (CS9108). Em tipos que não contêmref struct, acesse os parâmetrosref structapenas em inicializadores de campos ou no corpo do construtor, não em membros de instância (CS9110, CS9136). - Para classes
ref struct, você não pode usar parâmetros do construtor principal com os modificadoresin,refououtem métodos de instância ou acessadores de propriedade. Copie o valor do parâmetro para um campo no construtor e use esse campo em membros de instância (CS9109).
Restrições de tipo de struct
- CS9111: métodos anônimos, expressões lambda, expressões de consulta e funções locais dentro de um membro de instância de um struct não podem acessar o parâmetro do construtor primário.
- CS9112: Métodos anônimos, expressões lambda, expressões de consulta e funções locais dentro de um struct não podem acessar o parâmetro de construtor primário, também usado dentro de um membro de instância.
- CS9120: Não é possível retornar o parâmetro de construtor primário por referência.
- CS9121: O parâmetro de construtor primário de struct do tipo causa um ciclo no layout do struct.
Para resolver estes erros:
- Em tipos struct, você não pode capturar parâmetros de construtor primário em expressões lambda, expressões de consulta ou funções locais dentro de membros de instância. Copie o parâmetro para uma variável ou campo local antes de usá-lo nesses contextos (CS9111, CS9112).
- Não é possível retornar parâmetros do construtor primário por referência em tipos de estrutura. Armazene o valor em um campo e retorne esse campo por referência, se necessário (CS9120).
- Verifique se o tipo de parâmetro de construtor primário não cria um ciclo no layout do struct. Um struct não pode conter um campo de seu próprio tipo direta ou indiretamente (CS9121).
Restrições de estruturas somente leitura
- CS9114: Um parâmetro de construtor primário de um tipo somente leitura não pode receber uma atribuição (exceto no setter somente inicialização do tipo ou em um inicializador de variável).
- CS9115: Um parâmetro de construtor primário de um tipo somente leitura não pode ser retornado por referência gravável.
-
CS9116: um parâmetro de construtor primário de um tipo somente leitura não pode ser usado como um valor
refouout(exceto no setter somente inicialização do tipo ou em um inicializador de variável). - CS9117: Membros de um parâmetro de construtor primário de um tipo somente leitura não podem ser modificados (exceto no setter somente inicialização do tipo ou em um inicializador de variável).
- CS9118: Membros do parâmetro de construtor primário de um tipo somente leitura não podem ser retornados por referência gravável.
-
CS9119: Membros do parâmetro de construtor primário de um tipo somente leitura não podem ser usados como valor
refouout(exceto no setter somente inicialização do tipo ou em um inicializador de variável).
Para resolver estes erros:
- Em tipos
readonly struct, você não pode modificar os parâmetros do construtor primário e seus membros fora de setters exclusivos para inicialização ou de inicializadores de variáveis. Mover atribuições para inicializadores de campo ou definidores de propriedade somente para inicialização (CS9114, CS9117). - Você não pode retornar parâmetros do construtor primário e seus membros por referência modificável em tipos
readonly struct. Retornar porreadonly refou por valor em vez disso (CS9115, CS9118). - Você não pode passar parâmetros de construtor primário e seus membros como argumentos
refououtpara tiposreadonly struct. Passe-os por valor ou comoinargumentos em vez disso (CS9116, CS9119).
Avisos para parâmetros capturados e ocultados
- CS9107: o parâmetro é capturado no estado do tipo delimitador e seu valor também é passado para o construtor base. O valor também pode ser capturado pela classe base.
- CS9113: o parâmetro não é lido.
- CS9124: O parâmetro é capturado no estado do tipo envolvente e seu valor também é usado para inicializar um campo, uma propriedade ou um evento.
- CS9179: O parâmetro do construtor primário é sombreado por um membro da base.
Os avisos a seguir indicam possíveis problemas com a forma como você armazena ou acessa parâmetros de construtor primário:
- Você pode acabar armazenando um parâmetro duas vezes se, além de passá-lo para o construtor da classe base, também acessá-lo na classe derivada. Você pode ter uma cópia na classe base e outra na classe derivada. Considere se você precisa de ambas as cópias ou reestruturar seu código para evitar a duplicação (CS9107).
- Você não precisa de um parâmetro no construtor primário se nunca for utilizá-lo. Remova parâmetros não utilizados da declaração do construtor primário (CS9113).
- Você pode acabar armazenando um parâmetro duas vezes se, além de capturá-lo no tipo envolvente, também o usar para inicializar um campo, uma propriedade ou um evento. Considere usar o parâmetro capturado diretamente em vez de inicializar um membro separado (CS9124).
- Um membro do tipo base sombreia um parâmetro de construtor primário quando ambos têm o mesmo nome. Renomeie o parâmetro para evitar confusão (CS9179).