Partilhar via


Campos (guia de programação de 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. Os 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, 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 na instância um será 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, 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 acessível a mais de um método de classe e devem ser armazenados por mais de 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: uma 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 pelo 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 Using Constructors (C# Programming Guide).

ObservaçãoObservação

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 Access Modifiers (C# Programming Guide).

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 Static Classes and Static Class Members (C# Programming Guide).

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

Especificação da linguagem C#

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

Consulte também

Referência

Classes e estruturas (guia de programação de C#)

Using Constructors (C# Programming Guide)

Inheritance (C# Programming Guide)

Access Modifiers (C# Programming Guide)

Abstract and Sealed Classes and Class Members (C# Programming Guide)

Conceitos

C# Programming Guide

Histórico de alterações

Date

History

Motivo

Agosto de 2010

Corrigido condições o if declarações de exemplo.

Comentários do cliente.