This article is currently in the process of being translated into Portuguese (~99% done).
Fields
Um dos blocos básicos de construção de classe é o "field"(campo). É como uma variável, a qual falamos sobre anteriormente, mas definida no nível de classe ao invés do nível de método. A diferença é bastante importante e tem tudo a ver com o conceito de "scopes"(escopos), que decide de onde uma variável pode ser acessada: Uma variável local (definida dentro de um método) só pode ser acessada desse método específico, enquanto uma classe "field" pode ser acessada de todos os métodos da classe e ainda de métodos de outras classe se a visibilidade permitir isso.
Em outras palavras, a diferença entre uma variável e um "field" é praticamente onde foi declarado. Uma variável com nível de classe chamado de "field", enquanto uma variável com nível de método é usualmente chamada apenas de variável.
"Fields" são frequentemente declarados próximos ao topo de uma classe e sua visibilidade são frequentemente privada (nós iremos discutir visibilidade futuramente nesse capítulo). Pode se parecer com isso:
public class FieldsSample
{
private string name;
....
Nós agora temos uma variável com nível de classe chamada "name"(nome), a qual pode ser acessada de todos os métodos dessa classe. Não podendo ser acessada de fora da classe, apenas porque nós marcamos como private. Você é livre para declarar seus "fields"as protected se quiser acessá-los de classes derivadas ou então public se quiser acessá-los de qualquer lugar, mas tenha em mente que o caminho recomendado de acesso dos "fields" de fora de uma classe é através de properties, que vamos discutir no próximo artigo.
No nosso exemplo acima, a variável "name" não possui um valor inicial, significando que você terá de atribuir algo antes de poder usá-la. Se você já sabe qual valor seu "field" deve começar, você pode facilmente atribuir ao mesmo tempo que o declara.
public class FieldsSample
{
private string name = "John Doe";
....
Como alternativa, você pode assinalar um valor para um campo no construtor da classe. Isso vai substituir qualquer valor atribuído para o "field" no momento da declaração e vai permitir a atribuição de valores dinâmicos.
Como falamos anteriormente, membros de uma classe podem ser acessados com o ponto-notação, como "class.member". Entretanto, quando estamos acessando um membro de uma classe, nós usamos o "this", exemplo "this.member". Aqui está um exemplo mais completo onde nós declaramos alguns "fields" e usamos eles dentro de um método:
public class Fields1
{
private string name = "John Doe";
private int age = 42;
public void Describe()
{
string description = this.name + " is " + this.age + " years old...";
Console.WriteLine(description);
}
}
No método "Describe()" (e não se preocupe, explicaremos métodos em um dos nossos próximos artigos) nós declaramos uma variável local chamada "description", com um valor baseado em nossos dois "fields" declarados. A variável "description" é um bom exemplo de variável que deverá sempre ser uma variável e nunca um "field": É temporária e relevante apenas ao método que a usa, onde os "fields" podem facilmente serem relevantes em outros métodos da classe.
Resumo
"Fields" agem um pouco como variáveis locais porque podem ser usadas para armazenar dados que podem ser acessados de qualquer lugar dentro da classe. Eles podem ser acessados de fora da classe declarada também, porém normalmente, propriedades são usadas para esse propósito. Nós falaremos sobre propriedades no próximo artigo.