C# Público e Privado

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 classtutorial , você aprendeu como usar a publicpalavra-chave para tornar um campo ou método acessível tanto dentro quanto fora de uma classe.

A publicpalavra-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 publicpalavra-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 Personclasse com dois campos públicos FirstNamee LastNameum 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 Personclasse 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 DoeLinguagem de código:  C#  ( cs )

O modificador de acesso privado

O privatemodificador de acesso usa a privatepalavra-chave. Ao usar a privatepalavra-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 FirstNamee LastNamedo Personobjeto ‘:

// 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 lastNameaos campos FirstNamee 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 Personclasse:

private bool isValidName(string? name)
{
    return !string.IsNullOrEmpty(name);
}Linguagem de código:  C#  ( cs )

Segundo, torne os campos firstNamee lastNameprivados:

private string firstName;
private string lastName;Linguagem de código:  C#  ( cs )

Por convenção, os campos privados são como camelCase firstNamee lastName. Portanto, renomeamos os nomes dos campos para seguir a convenção da comunidade.

Como os campos firstNamee lastNamesão privados, não podemos acessá-los fora da Personclasse. 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()à Personclasse:

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 Personclasse 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 Personobjeto ‘ 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.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *