Pergunta

Não consigo encontrar "campo" listado como uma palavra -chave C# em qualquer lugar. Alguém sabe o pano de fundo sobre isso?

Foi útil?

Solução

O compilador C# geralmente não tem problemas para descobrir a que parte de uma declaração a qual o atributo se aplica. Eu posso pensar em três casos em que você pode usá -lo:

  1. Atributos que se aplicam à montagem. Muito visível em AssemblyInfo.cs
  2. Um atributo aplicado ao valor de retorno de uma declaração P/Invoke, [Return: Marshalas
  3. Ter o atributo se aplicar à variável de apoio de uma propriedade ou evento sem acessores. Seu caso.

Outras dicas

Isso é necessário, por exemplo, se você estiver marcando um evento como não-serriizável. Ele especifica o alvo ao qual o atributo se aplica.

Faz parte da sintaxe do destino do atributo. De especificação:

attribute-target:
    field
    event
    method
    param
    property
    return
    type

Veja também a documentação para NonSerializedAttribute:

Para aplicar o NonSerializedAttribute Classe para um evento, defina o local do atributo como campo, conforme mostrado no código C# a seguir.

[field:NonSerializedAttribute()]

public event ChangedEventHandler Changed;

Isso destina -se a permitir que você defina um atributo não serinciado nos campos, isso é útil na serialização de eventos.

Por exemplo, isso lhe daria um erro de compilação

[NonSerialized]
public event SomeEventHandler SomeEvent;

Para consertar isso, você tem que usar field:

[field:NonSerialized]
public event SomeEventHandler SomeEvent;

Mais sobre isso aqui - Delegados e serialização

O não -rolo não -serriizado é aplicável apenas aos campos, você pode usá -lo da seguinte forma:

[NonSerialized]
public string myString;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top