Compartilhar via


Campos (Guia de Programação em C#)

A campo é uma variável de qualquer tipo que é declarado diretamente em um classe ou struct. Os campos são membros de seu tipo de recipiente.

Class ou struct pode ter campos de instância ou campos estáticos ou ambos. Campos de instância são específicos a uma instância de um tipo. Se você tiver uma classe de T, com um campo de instância F, você pode criar dois objetos do tipo t e modificar o valor de f em cada objeto sem afetar o valor do outro objeto. Por outro lado, um campo estático pertence à própria classe e é compartilhado entre todas as instâncias dessa classe. As alterações feitas de instância um irá ser visivelmente imediatamente a instâncias de b e c se eles acessarem o campo.

Geralmente, você deve usar campos somente para variáveis que têm acessibilidade particular ou protegida. Os dados que sua classe expõe para o código do cliente devem ser fornecidos por meio de métodos, Propriedades e indexadores. Usando essas construções para acesso indireto a campos internos, você pode se proteger contra os valores de entrada inválidos. Um campo privado que armazena os dados expostos por uma propriedade pública é chamado um armazenamento de backup ou fazendo o campo.

Normalmente, os campos armazenam os dados que devem ser acessados por mais de um método de classe e devem ser armazenados por mais tempo que o tempo de vida de qualquer método único. Por exemplo, uma classe que representa uma data do calendário pode ter três campos de número inteiro: um para o mês, para o dia e outra para o ano. Variáveis que não são usadas fora do escopo de um método único devem ser declaradas como variáveis locais dentro do método body propriamente dito.

Campos são declarados no bloco de classe, especificando o nível de acesso do campo, seguido do tipo do campo, seguido do nome do campo. Por exemplo:

public class CalendarEntry
{
    // private field 
    private DateTime date;

    // public field (Generally not recommended.) 
    public string day;

    // Public property exposes date field safely. 
    public DateTime Date 
    {
        get 
        {
            return date;
        }
        set 
        {
            // Set some reasonable boundaries for likely birth dates. 
            if (value.Year > 1900 && value.Year <= DateTime.Today.Year)
            {
                date = value;
            }
            else 
                throw new ArgumentOutOfRangeException();
        }

    }

    // Public method also exposes date field safely. 
    // Example call: birthday.SetDate("1975, 6, 30");
    public void SetDate(string dateString)
    {
        DateTime dt = Convert.ToDateTime(dateString);

        // Set some reasonable boundaries for likely birth dates. 
        if (dt.Year > 1900 && dt.Year <= DateTime.Today.Year)
        {
            date = dt;
        }
        else 
            throw new ArgumentOutOfRangeException();
    }

    public TimeSpan GetTimeSpan(string dateString)
    {
        DateTime dt = Convert.ToDateTime(dateString);

        if (dt != null && dt.Ticks < date.Ticks)
        {
            return date - dt;
        }
        else 
            throw new ArgumentOutOfRangeException();  

    }
}

Para acessar um campo em um objeto, adicione um período após o nome do objeto, seguido do nome do campo, como em objectname.fieldname. Por exemplo:

CalendarEntry birthday = new CalendarEntry();
birthday.day = "Saturday";

Pode ser designado a um campo de um valor inicial usando o operador de atribuição quando o campo é declarado. Para atribuir automaticamente o day campo para "Monday", por exemplo, você poderia declarar day como no exemplo a seguir:

public class CalendarDateWithInitialization
{
    public string day = "Monday";
    //...
}

Campos sejam inicializados imediatamente antes que o construtor para a instância do objeto é chamado. Se o construtor atribui o valor de um campo, ele substituirá qualquer valor fornecido durante a declaração de campo. Para obter mais informações, consulte Usando construtores (Guia de Programação em C#).

Dica

Um inicializador de campo não pode se referir a outros campos de instância.

Campos podem ser marcados como pública, particular, protegido, interno, ou protected internal. Esses modificador de acessos definem como os usuários da classe podem acessar os campos. Para obter mais informações, consulte Modificadores de acesso (Guia de Programação em C#).

Opcionalmente, pode ser declarado um campo estático. Isso disponibiliza o campo para chamadores a qualquer hora, mesmo que nenhuma instância da classe existe. Para obter mais informações, consulte Classes static e membros de classes static (Guia de Programação em C#).

Um campo pode ser declarado somente leitura. Um campo somente leitura pode ser atribuído apenas um valor durante a inicialização ou em um construtor. A staticreadonly campo é muito semelhante a uma constante, exceto que o compilador C# não tem acesso ao valor de um campo somente leitura estático em tempo de compilação, somente em tempo de execução. Para obter mais informações, consulte Constantes (Guia de Programação em C#).

Especificação da linguagem C#

Para obter mais informações, consulte a Especificação da linguagem C#. A especificação da linguagem é a fonte definitiva para a sintaxe e o uso de C#.

Consulte também

Referência

Classes e structs (Guia de Programação em C#)

Usando construtores (Guia de Programação em C#)

Herança (Guia de Programação em C#)

Modificadores de acesso (Guia de Programação em C#)

Classes e membros de classes abstract e sealed (Guia de Programação em C#)

Conceitos

Guia de Programação em C#