Resumo : neste tutorial, você aprenderá sobre as palavras-chave públicas e privadas do C# e as diferenças entre elas.
Introdução aos modificadores de acesso em C#
Ao declarar um campo ou método dentro de uma classe, você pode especificar um nível de acessibilidade. No class
tutorial , você aprendeu como usar a public
palavra-chave para tornar um campo ou método acessível tanto dentro quanto fora de uma classe.
A public
palavra-chave é um modificador de acesso. Além do modificador de acesso público, C# possui outros modificadores de acesso como segue:
- privado
- protegido
- interno
- interno protegido
- privado protegido
Neste tutorial, você se concentrará nos modificadores de acesso público e privado.
O modificador de acesso público
Ao usar a public
palavra-chave para um campo ou método, você pode acessar o campo e o método dentro e fora de uma classe.
Por exemplo, o seguinte define a Person
classe com dois campos públicos FirstName
e LastName
um método público GetFullName()
:
// Person.cs
class Person
{
public string FirstName;
public string LastName;
public string GetFullName()
{
return $"{this.FirstName} {this.LastName}";
}
}
Linguagem de código: C# ( cs )
Como os campos e métodos da Person
classe são públicos, você pode acessá-los de fora da classe assim:
// Program.cs
Person p1 = new();
p1.FirstName = "John";
p1.LastName = "Doe";
Console.WriteLine(p1.GetFullName());
Linguagem de código: C# ( cs )
Saída:
John Doe
Linguagem de código: C# ( cs )
O modificador de acesso privado
O private
modificador de acesso usa a private
palavra-chave. Ao usar a private
palavra-chave para um campo ou método, você só pode acessar o campo ou método privado dentro da mesma classe. Isso significa que você não pode acessar o campo ou método privado fora da classe.
Normalmente, você usa o modificador de acesso privado para impedir o acesso direto aos campos de uma classe. Além disso, você usa o método privado quando deseja usá-lo apenas dentro da classe.
Se você não especificar um modificador de acesso para um membro, esse membro será privado.
O programa a seguir solicita que você insira seu nome e sobrenome e atribui valores aos campos FirstName
e LastName
do Person
objeto ‘:
// Program.cs
Person p1 = new();
Console.WriteLine("Enter the first name and last name:");
string? firstName = Console.ReadLine();
string? lastName = Console.ReadLine();
if (!string.IsNullOrEmpty(firstName))
{
p1.FirstName = firstName;
}
if (!string.IsNullOrEmpty(lastName))
{
p1.LastName = lastName;
}
Console.WriteLine(p1.GetFullName());
Linguagem de código: C# ( cs )
Neste exemplo, antes de atribuir as variáveis firstName
e lastName
aos campos FirstName
e LastName
, verificamos se as strings de entrada não são nulas ou vazias.
Porém, se precisarmos fazer isso em vários locais do programa, teremos que duplicar o código. Além disso, se quisermos alterar a lógica de validação, precisamos alterá-la em vários lugares. Portanto, o código se torna muito difícil de manter. E viola o princípio DRY (Don’t Repeat Yourself) na programação.
Para corrigir isso, você pode seguir estas etapas:
Primeiro, envolva a lógica de verificação como um método privado na Person
classe:
private bool isValidName(string? name)
{
return !string.IsNullOrEmpty(name);
}
Linguagem de código: C# ( cs )
Segundo, torne os campos firstName
e lastName
privados:
private string firstName;
private string lastName;
Linguagem de código: C# ( cs )
Por convenção, os campos privados são como camelCase firstName
e lastName
. Portanto, renomeamos os nomes dos campos para seguir a convenção da comunidade.
Como os campos firstName
e lastName
são privados, não podemos acessá-los fora da Person
classe. Portanto, para atribuir valores a esses campos, podemos definir dois métodos públicos SetFirstName()
e SetLastName()
.
Terceiro, adicione os métodos SetFirstName()
e SetLastName()
à Person
classe:
public Person SetFirstName(string? firstName)
{
if (isValidName(firstName))
{
this.firstName = firstName;
}
return this;
}
public Person SetLastName(string? lastName)
{
if (isValidName(lastName))
{
this.lastName = lastName;
}
return this;
}
Linguagem de código: C# ( cs )
Dentro desses métodos, chamamos o isValidName()
método para validar o nome antes de atribuí-lo ao campo privado correspondente.
Observe que você aprenderá como fazer isso de maneira mais elegante usando uma propriedade com getters e setters posteriormente .
O seguinte mostra a Person
classe completa:
// Person.cs
class Person
{
private string firstName;
private string lastName;
public string GetFullName()
{
return $"{this.firstName} {this.lastName}";
}
private bool isValidName(string name)
{
return !string.IsNullOrEmpty(name);
}
public Person SetFirstName(string firstName)
{
if (isValidName(firstName))
{
this.firstName = firstName;
}
return this;
}
public Person SetLastName(string lastName)
{
if (isValidName(lastName))
{
this.lastName = lastName;
}
return this;
}
}
Linguagem de código: C# ( cs )
Agora, você pode criar o Person
objeto ‘ e chamar os métodos públicos SetFirstName()
e SetLastName()
definir os campos privados de nome e sobrenome:
// Program.cs
Person p1 = new();
Console.WriteLine("Enter the first name and last name:");
string? firstName = Console.ReadLine();
string? lastName = Console.ReadLine();
string name = p1.SetFirstName(firstName)
.SetLastName(lastName)
.GetFullName();
Console.WriteLine(name);
Linguagem de código: C# ( cs )
Resumo
- Use o modificador de acesso público para os campos e métodos acessíveis dentro e fora da classe.
- Use o modificador de acesso privado para os campos e métodos que são acessíveis somente dentro da mesma classe.