Erros e avisos relacionados a declarações partial
de tipo e partial
membro
Há vários erros relacionados a declarações de partial
tipo e partial
membros:
- CS0260: modificador parcial ausente na declaração do tipo; existe outra declaração parcial desse tipo
- CS0261: as declarações parciais de tipo devem ser todas as classes, todos as estruturas ou todas as interfaces
- CS0262: as declarações parciais de tipo têm modificadores de acessibilidade conflitantes
- CS0263: as declarações parciais de tipo não devem especificar classes de base diferentes
- CS0264: as declarações parciais de tipo devem ter os mesmos nomes de parâmetros de tipo na mesma ordem
- CS0265: as declarações parciais de tipo têm restrições inconsistentes para o parâmetro de tipo "parâmetro de tipo"
- CS0267: o modificador '
partial
' só pode aparecer imediatamente antes de 'class
', 'record
', 'struct
', 'interface
' ou de um método ou tipo de retorno de propriedade. - CS0282: não há ordenação definida entre os campos em várias declarações de classe parcial ou "tipo" de estrutura. Para especificar uma ordenação, todos os campos de instância devem estar na mesma declaração.
- CS0501: "Função de membro" deve declarar um corpo porque não está marcada com
abstract
,extern
, oupartial
- CS0750: um membro parcial não pode ter o modificador "
abstract
". - CS0751: um membro parcial deve ser declarado em um parcial
class
ou parcialstruct
- CS0754: um membro parcial não pode implementar explicitamente um método de interface.
- CS0755: ambas as declarações de método parcial devem ser métodos de extensão ou nenhuma delas pode ser um método de extensão.
- CS0756: Um método parcial não pode ter várias declarações de definição.
- CS0757: Um método parcial não pode ter várias declarações de implementação.
- CS0759: nenhuma declaração de definição encontrada para implementar a declaração de método parcial.
- CS0761: declarações parciais de métodos de
method<T>
têm restrições inconsistentes de parâmetros de tipo. - CS0762: não é possível criar um delegado a partir do método porque ele é um método parcial sem uma declaração de implementação
- CS0763: ambas as declarações de métodos parciais devem ser
static
ou nenhuma delas pode serstatic
. - CS0764: ambas as declarações de métodos parciais devem ser
unsafe
ou nenhuma delas pode serunsafe
- CS1067: as declarações parciais devem ter os mesmos nomes de parâmetros de tipo e modificadores de variância na mesma ordem.
- CS8142: ambas as declarações de membro parcial devem usar os mesmos nomes de elementos de tupla.
- CS8663: ambas as declarações parciais de membro devem ser somente leitura ou nenhuma pode ser somente leitura
- CS8796: o método parcial deve ter modificadores de acessibilidade porque tem um tipo de retorno não nulo.
- CS8795: O membro parcial deve ter uma parte de implementação porque possui modificadores de acessibilidade.
- CS8797: o método parcial deve ter modificadores de acessibilidade porque possui parâmetros "
out
". - CS8798: o método parcial deve ter modificadores de acessibilidade porque tem um modificador '
virtual
", "override
", "sealed
" , "new
" ou "extern
". - CS8799: ambas as declarações de membro parcial devem ter modificadores de acessibilidade idênticos.
- CS8800: ambas as declarações de membro parcial devem ter combinações idênticas de modificadores
virtual
,override
,sealed
, enew
. - CS8817: ambas as declarações de método parcial devem ter o mesmo tipo de retorno.
- CS8818: as declarações de membro parciais devem ter valores retornados
ref
correspondentes. - CS8863: somente uma única declaração de tipo parcial pode ter uma lista de parâmetros
- CS8988: o
scoped
modificador do parâmetro não corresponde à definição parcial. - CS9248: a propriedade parcial deve ter uma parte de implementação.
- CS9249: a propriedade parcial deve ter uma parte de definição.
- CS9250: uma propriedade parcial pode não ter várias declarações de definição e não pode ser uma propriedade automática.
- CS9251: uma propriedade parcial não pode ter várias declarações de implementação
- CS9252: o acessador de propriedade deve ser implementado porque ele é declarado na parte de definição
- CS9253: o acessador de propriedade não implementa nenhum acessador declarado na parte de definição
- CS9254: o acessador de propriedade deve corresponder à parte de definição
- CS9255: ambas as declarações de propriedade parcial devem ter o mesmo tipo.
- CS9256: as declarações de propriedade parcial têm diferenças de assinatura.
- CS9257: ambas as declarações de propriedade parciais devem ser obrigatórias ou nenhuma pode ser obrigatória
- CS9258: Nesta versão de linguagem, a palavra-chave '
field
' é ligada a um campo de suporte sintetizado para a propriedade. Para evitar a geração de um campo de apoio sintetizado e para se referir ao membro existente, use 'this.field
' ou '@field
'. - CS9263: Uma propriedade parcial não pode ter um inicializador na definição e na implementação.
Os seguintes avisos podem ser gerados para propriedades com suporte de campo:
- CS9264: A propriedade não anulável deve conter um valor não nulo ao sair do construtor. Considere adicionar o modificador 'required' ou declarar a propriedade como anulável ou adicionar atributos '
[field: MaybeNull, AllowNull]
'.* - CS9266: Um acessador de propriedade deve usar '
field
' porque o outro acessador o está usando.
As seções a seguir explicam a causa e as correções desses erros e avisos.
Tipos parciais
- CS0260: modificador parcial ausente na declaração do tipo; existe outra declaração parcial desse tipo
- CS0261: as declarações parciais de tipo devem ser todas as classes, todos as estruturas ou todas as interfaces
- CS0262: as declarações parciais de tipo têm modificadores de acessibilidade conflitantes
- CS0263: as declarações parciais de tipo não devem especificar classes de base diferentes
- CS0264: as declarações parciais de tipo devem ter os mesmos nomes de parâmetros de tipo na mesma ordem
- CS0265: as declarações parciais de tipo têm restrições inconsistentes para o parâmetro de tipo "parâmetro de tipo"
- CS0267: o modificador '
partial
' só pode aparecer imediatamente antes de 'class
', 'record
', 'struct
', 'interface
' ou de um método ou tipo de retorno de propriedade. - CS8863: somente uma única declaração de tipo parcial pode ter uma lista de parâmetros
Sua declaração de tipo parcial pode fazer com que o compilador emita o seguinte aviso:
- CS0282: Não há uma ordenação definida entre os campos em várias declarações de parcial
class
oustruct
"type". Para especificar uma ordenação, todos os campos de instância devem estar na mesma declaração.
Para qualquer tipo parcial, a partial
palavra-chave deve imediatamente preceder class
, record
, struct
ou interface
. O compilador emite um erro se aparecer em qualquer outra ordem. Além disso:
- Todas as declarações de um tipo parcial devem corresponder em termos do tipo (
class
,struct
,record class
,record struct
,readonly struct
, oureadonly record struct
). - Todas as declarações devem incluir o modificador
partial
. - As declarações de um tipo parcial genérico devem incluir os mesmos parâmetros de tipo na mesma ordem.
Não é obrigatório repetir algumas partes da declaração em todas as declarações de um tipo. No entanto, se esses elementos forem repetidos em várias declarações partial
, eles deverão corresponder:
- Quaisquer modificadores de acesso, como
public
. - Qualquer classe base ou interfaces implementadas.
- Quaisquer restrições nos parâmetros de tipo.
Um construtor primário pode ser declarado em no máximo uma declaração para um tipo parcial.
O compilador avisa se você tiver vários campos declarados em vários arquivos para um tipo partial struct
. Se a ordem do layout for importante, você deverá declarar todos os campos no mesmo arquivo. Se a ordem não importa, você pode usar o System.Runtime.InteropServices.StructLayoutAttribute com o valor LayoutKind.Auto.
Membros parciais
- CS0750: um membro parcial não pode ter o modificador "
abstract
". - CS0751: um membro parcial deve ser declarado em um parcial
class
ou parcialstruct
- CS0754: um membro parcial não pode implementar explicitamente um método de interface.
- CS0763: ambas as declarações de métodos parciais devem ser
static
ou nenhuma delas pode serstatic
. - CS0764: ambas as declarações de métodos parciais devem ser
unsafe
ou nenhuma deve serunsafe
- CS8142: ambas as declarações de membro parcial devem usar os mesmos nomes de elementos de tupla.
- CS8663: ambas as declarações parciais de membro devem ser somente leitura ou nenhuma pode ser somente leitura
- CS8799: ambas as declarações de membro parcial devem ter modificadores de acessibilidade idênticos.
- CS8800: Ambas as declarações de membro parcial devem ter combinações idênticas de modificadores
virtual
,override
,sealed
, enew
. - CS8818: as declarações de membro parciais devem ter valores retornados
ref
correspondentes. - CS8988: O
scoped
modificador do parâmetro não corresponde à definição parcial.
Os membros parciais têm duas declarações. A declaração sem uma implementação é a declaração declarante. A declaração com a implementação é a declaração de implementação. Membros parciais são permitidos somente em um tipo partial
. Membros parciais não podem ser abstract
. Membros parciais não podem implementar explicitamente uma interface. Ambas as declarações de um membro parcial devem ter assinaturas idênticas. Por exemplo, ambas ou nenhuma declaração pode incluir os modificadores static
ou unsafe
.
Métodos parciais
- CS0501: "Função de membro" deve declarar um corpo porque não está marcada com
abstract
,extern
oupartial
- CS0755: As duas declarações de métodos parciais devem ser métodos de extensão ou nenhuma delas poderá ser desse tipo.
- CS0756: Um método parcial não pode ter várias declarações de definição.
- CS0757: Um método parcial não pode ter várias declarações de implementação.
- CS0759: nenhuma declaração de definição encontrada para implementar a declaração de método parcial.
- CS0761: declarações parciais de métodos de
method<T>
têm restrições inconsistentes de parâmetros de tipo. - CS0762: não é possível criar um delegado a partir do método porque ele é um método parcial sem uma declaração de implementação
- CS1067: as declarações parciais devem ter os mesmos nomes de parâmetros de tipo e modificadores de variância na mesma ordem.
- CS8796: o método parcial deve ter modificadores de acessibilidade porque tem um tipo de retorno não nulo.
- CS8795: O membro parcial deve ter uma parte de implementação porque possui modificadores de acessibilidade.
- CS8797: o método parcial deve ter modificadores de acessibilidade porque possui parâmetros "
out
". - CS8798: o método parcial deve ter modificadores de acessibilidade porque tem um modificador "
virtual
" , "override
", "sealed
", "new
", or "extern
". - CS8817: ambas as declarações de método parcial devem ter o mesmo tipo de retorno.
Determinadas partial
declarações de método não exigem uma declaração de implementação. Ou seja, se o membro retornar void
, não declara nenhum modificador de acesso (incluindo o modificador padrão private
) e não inclui nenhum dos modificadores virtual
, override
, sealed
, ou new
. Caso contrário, qualquer método parcial deve incluir as declarações de declaração e de implementação.
Quando um método parcial inclui uma declaração de implementação, ambas as declarações devem ser idênticas. Pode ser definida exatamente uma declaração de implementação.
Propriedades parciais
Os erros a seguir indicam erros em suas declarações de propriedade parcial ou de indexador:
- CS9248: a propriedade parcial deve ter uma parte de implementação.
- CS9249: a propriedade parcial deve ter uma parte de definição.
- CS9250: uma propriedade parcial pode não ter várias declarações de definição e não pode ser uma propriedade automática.
- CS9251: uma propriedade parcial não pode ter várias declarações de implementação
- CS9252: o acessador de propriedade deve ser implementado porque ele é declarado na parte de definição
- CS9253: o acessador de propriedade não implementa nenhum acessador declarado na parte de definição
- CS9254: o acessador de propriedade deve corresponder à parte de definição
- CS9255: ambas as declarações de propriedade parcial devem ter o mesmo tipo.
- CS9257: ambas as declarações de propriedade parciais devem ser obrigatórias ou nenhuma pode ser obrigatória
O aviso a seguir indica uma diferença de assinatura nas declarações de declaração e implementação em uma propriedade parcial:
- CS9256: as declarações de propriedade parcial têm diferenças de assinatura.
Uma propriedade parcial ou um indexador devem ter uma declaração declarante e uma declaração de implementação. As assinaturas de ambas as declarações devem corresponder. Como a declaração de declaração usa a mesma sintaxe de uma propriedade implementada automaticamente, a declaração de implementação não pode ser uma propriedade implementada automaticamente. Os acessadores devem ter pelo menos um corpo de acessador. A partir do C# 13, você pode usar a palavra-chave para declarar um acessador usando uma sintaxe concisa field
:
public partial int ImplementingDeclaration { get => field; set; }
Propriedades com suporte de campo
- CS9258: Nesta versão de linguagem, a palavra-chave '
field
' é ligada a um campo de suporte sintetizado para a propriedade. Para evitar a geração de um campo de apoio sintetizado e para se referir ao membro existente, use 'this.field
' ou '@field
'. - CS9263: Uma propriedade parcial não pode ter um inicializador na definição e na implementação.
- CS9264: A propriedade não anulável deve conter um valor não nulo ao sair do construtor. Considere adicionar o modificador 'required' ou declarar a propriedade como anulável ou adicionar atributos '
[field: MaybeNull, AllowNull]
'.* - CS9266: Um acessador de propriedade deve usar '
field
' porque o outro acessador o está usando.
Importante
A field
palavra-chave é um recurso de visualização no C# 13. Você deve estar usando o .NET 9 e definir seu <LangVersion>
elemento como preview
no arquivo de projeto para usar a field
palavra-chave contextual.
Você deve ter cuidado ao usar o recurso de field
palavra-chave em uma classe que tenha um campo chamado field
. A nova field
palavra-chave sombreia um campo nomeado field
no escopo de um acessador de propriedade. Você pode alterar o nome da field
variável ou usar o @
token para fazer referência ao field
identificador como @field
. Você pode saber mais lendo a especificação do recurso para a field
palavra-chave.
A partir do C# 13, o recurso de visualização, field
propriedades com suporte permite que você acesse o campo de suporte sintetizado do compilador para uma propriedade. CS9258 indica que você tem uma variável chamada field
, que pode ser ocultada pela palavra-chave field
contextual .
CS9263 indica que sua declaração de declaração inclui uma implementação. Essa implementação pode estar acessando o campo de suporte sintetizado do compilador para essa propriedade. CS9264 indica que o seu uso de pressupõe um campo de suporte não anulável enquanto a declaração de field
propriedade é anulável. O compilador pressupõe que o campo de suporte e a propriedade tenham a mesma nulidade. Você precisa adicionar o [field:MaybeNull, AllowNull]
atributo à declaração de propriedade para indicar que o field
valor deve ser considerado anulável. CS9266 indica que um dos acessadores de propriedades usa a field
palavra-chave, mas o outro usa um campo de suporte declarado manualmente. O aviso indica que você pode ter feito isso por acidente.