Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Modificadores de Acesso Comuns | Essenciais de Poo
C# Além do Básico

bookModificadores de Acesso Comuns

Você provavelmente já está familiarizado com a palavra-chave public. Ela é um modificador de acesso que define onde uma determinada classe, método ou campo pode ser acessado.

Da mesma forma, existem termos como private e protected. Ambos podem ser usados para especificar a acessibilidade de um método ou campo.

Quando você escreve public antes de uma classe, isso simplesmente torna a classe acessível a partir de diferentes partes (arquivos) do programa. Não é necessário explorar esse aspecto em detalhes, pois está fora do escopo deste capítulo.

Ao especificar um método ou campo como public, você basicamente torna essa propriedade da classe acessível de qualquer lugar no código por meio de um objeto:

index.cs

index.cs

copy
1234567891011121314151617181920212223
using System; public class Point { public int x; public int y; public Point(int x, int y) { this.x = x; this.y = y; } } class ConsoleApp { static void Main() { Point p = new Point(7, 9); // We can directly access 'public' fields of an object using the dot '.' symbol Console.WriteLine(p.x); Console.WriteLine(p.y); } }

Se você não deseja que um campo ou método de um objeto seja acessível fora da classe, podemos simplesmente torná-lo private:

index.cs

index.cs

copy
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
using System; class Point { public int x; public int y; private double magnitude; public Point(int x, int y) { this.x = x; this.y = y; this.magnitude = calculateMagnitude(); } // A private method can only be used inside the class. // Trying to use a private method outside the class might result in a compilation error. private double calculateMagnitude() { // Math.Sqrt() is the square root function. return Math.Sqrt(x * x + y * y); } // Sometimes, to be able to access data from a private field, we make public methods // which specifically retrieve the value of that field. Such methods are called "getters", // and such fields are called "read-only" fields as we can access their data but cannot modify it from outside the class. public double getMagnitude() { return magnitude; } } class ConsoleApp { static void Main() { Point p = new Point(7, 9); // Correct Console.WriteLine(p.getMagnitude()); // Error Console.WriteLine(p.calculateMagnitude()); // Error Console.WriteLine(p.magnitude); } }

É importante observar que os campos e métodos privados não são herdados pelas classes derivadas:

index.cs

index.cs

copy
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
using System; class Point { public int x; public int y; private double magnitude; public Point(int x, int y) { this.x = x; this.y = y; this.magnitude = calculateMagnitude(); } private double calculateMagnitude() { // Math.Sqrt() is the square root function. return Math.Sqrt(x * x + y * y); } public double getMagnitude() { return magnitude; } } class Point3D : Point { public int z; // The 'base(x, y)' part simply calls the constructor of the 'Point' class with 'x' and 'y' values. // This will be more thoroughly explained in the later section. public Point3D(int x, int y, int z) : base(x, y) { this.z = z; // Error calculateMagnitude(); } } class ConsoleApp { static void Main() { Point3D p = new Point3D(5, 7, 9); // Correct according to rules of language, however note that it will give the magnitude of x and y excluding z (for a 2D point) so logically the result will be wrong Console.WriteLine(p.getMagnitude()); } }

Para tornar um campo ou método inacessível fora da classe, mas acessível para classes filhas, utilize a palavra-chave protected:

index.cs

index.cs

copy
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
using System; class Point { public int x; public int y; protected double magnitude; public Point(int x, int y) { this.x = x; this.y = y; this.magnitude = calculateMagnitude(); } protected double calculateMagnitude() { // Math.Sqrt() is the squareroot function. return Math.Sqrt(x * x + y * y); } public double getMagnitude() { return magnitude; } } class Point3D : Point { public int z; public Point3D(int x, int y, int z) : base(x, y) { this.z = z; // No Error Now calculateMagnitude(); } } class ConsoleApp { static void Main() { Point3D p = new Point3D(5, 7, 9); Console.WriteLine(p.getMagnitude()); } }

Em alguns casos, para acessar atributos privados de uma classe, são criados métodos públicos chamados getters. O método getMagnitude é um exemplo de getter. Isso garante que o campo seja apenas legível e não modificável, tornando esse atributo somente leitura.

Note
Nota

Se nenhum modificador de acesso for especificado para um membro de classe, ele será considerado private por padrão.

1. Qual modificador de acesso permite que um membro seja acessível apenas dentro de sua própria classe?

2. Como tornar um atributo de classe inacessível de fora?

3. Qual é uma boa maneira de acessar os valores de campos privados a partir de fora da classe?

question mark

Qual modificador de acesso permite que um membro seja acessível apenas dentro de sua própria classe?

Select the correct answer

question mark

Como tornar um atributo de classe inacessível de fora?

Select the correct answer

question mark

Qual é uma boa maneira de acessar os valores de campos privados a partir de fora da classe?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 4. Capítulo 3

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Awesome!

Completion rate improved to 2.04

bookModificadores de Acesso Comuns

Deslize para mostrar o menu

Você provavelmente já está familiarizado com a palavra-chave public. Ela é um modificador de acesso que define onde uma determinada classe, método ou campo pode ser acessado.

Da mesma forma, existem termos como private e protected. Ambos podem ser usados para especificar a acessibilidade de um método ou campo.

Quando você escreve public antes de uma classe, isso simplesmente torna a classe acessível a partir de diferentes partes (arquivos) do programa. Não é necessário explorar esse aspecto em detalhes, pois está fora do escopo deste capítulo.

Ao especificar um método ou campo como public, você basicamente torna essa propriedade da classe acessível de qualquer lugar no código por meio de um objeto:

index.cs

index.cs

copy
1234567891011121314151617181920212223
using System; public class Point { public int x; public int y; public Point(int x, int y) { this.x = x; this.y = y; } } class ConsoleApp { static void Main() { Point p = new Point(7, 9); // We can directly access 'public' fields of an object using the dot '.' symbol Console.WriteLine(p.x); Console.WriteLine(p.y); } }

Se você não deseja que um campo ou método de um objeto seja acessível fora da classe, podemos simplesmente torná-lo private:

index.cs

index.cs

copy
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
using System; class Point { public int x; public int y; private double magnitude; public Point(int x, int y) { this.x = x; this.y = y; this.magnitude = calculateMagnitude(); } // A private method can only be used inside the class. // Trying to use a private method outside the class might result in a compilation error. private double calculateMagnitude() { // Math.Sqrt() is the square root function. return Math.Sqrt(x * x + y * y); } // Sometimes, to be able to access data from a private field, we make public methods // which specifically retrieve the value of that field. Such methods are called "getters", // and such fields are called "read-only" fields as we can access their data but cannot modify it from outside the class. public double getMagnitude() { return magnitude; } } class ConsoleApp { static void Main() { Point p = new Point(7, 9); // Correct Console.WriteLine(p.getMagnitude()); // Error Console.WriteLine(p.calculateMagnitude()); // Error Console.WriteLine(p.magnitude); } }

É importante observar que os campos e métodos privados não são herdados pelas classes derivadas:

index.cs

index.cs

copy
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
using System; class Point { public int x; public int y; private double magnitude; public Point(int x, int y) { this.x = x; this.y = y; this.magnitude = calculateMagnitude(); } private double calculateMagnitude() { // Math.Sqrt() is the square root function. return Math.Sqrt(x * x + y * y); } public double getMagnitude() { return magnitude; } } class Point3D : Point { public int z; // The 'base(x, y)' part simply calls the constructor of the 'Point' class with 'x' and 'y' values. // This will be more thoroughly explained in the later section. public Point3D(int x, int y, int z) : base(x, y) { this.z = z; // Error calculateMagnitude(); } } class ConsoleApp { static void Main() { Point3D p = new Point3D(5, 7, 9); // Correct according to rules of language, however note that it will give the magnitude of x and y excluding z (for a 2D point) so logically the result will be wrong Console.WriteLine(p.getMagnitude()); } }

Para tornar um campo ou método inacessível fora da classe, mas acessível para classes filhas, utilize a palavra-chave protected:

index.cs

index.cs

copy
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
using System; class Point { public int x; public int y; protected double magnitude; public Point(int x, int y) { this.x = x; this.y = y; this.magnitude = calculateMagnitude(); } protected double calculateMagnitude() { // Math.Sqrt() is the squareroot function. return Math.Sqrt(x * x + y * y); } public double getMagnitude() { return magnitude; } } class Point3D : Point { public int z; public Point3D(int x, int y, int z) : base(x, y) { this.z = z; // No Error Now calculateMagnitude(); } } class ConsoleApp { static void Main() { Point3D p = new Point3D(5, 7, 9); Console.WriteLine(p.getMagnitude()); } }

Em alguns casos, para acessar atributos privados de uma classe, são criados métodos públicos chamados getters. O método getMagnitude é um exemplo de getter. Isso garante que o campo seja apenas legível e não modificável, tornando esse atributo somente leitura.

Note
Nota

Se nenhum modificador de acesso for especificado para um membro de classe, ele será considerado private por padrão.

1. Qual modificador de acesso permite que um membro seja acessível apenas dentro de sua própria classe?

2. Como tornar um atributo de classe inacessível de fora?

3. Qual é uma boa maneira de acessar os valores de campos privados a partir de fora da classe?

question mark

Qual modificador de acesso permite que um membro seja acessível apenas dentro de sua própria classe?

Select the correct answer

question mark

Como tornar um atributo de classe inacessível de fora?

Select the correct answer

question mark

Qual é uma boa maneira de acessar os valores de campos privados a partir de fora da classe?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 4. Capítulo 3
some-alt