POO: Scope / Visibility
Introdução Se você não escrever nenhum modificador num membro de classe, ele vira private por padrão. E se você não escrever nenhum modificador numa classe de nível superior, ela vira internal por padrão. class Veiculo // sem "public" aqui, seria "internal" por padrão { double _combustivel ; // sem modificador = private implícito — CUIDADO, é fácil esquecer } Tabela completa de todos os níveis,…
Caso não adicione nenhum modificador a um membro de classe, ele receberá acesso privado por padrão. Se nenhum modificador for especificado a uma classe de nível superior, ela será internal por padrão. A classe Veiculo, quando declarada sem nenhum modificador, será internal por padrão.
Exemplo de tabela de visibilidade de modificador:
Modificador | Acesso permitido
-------------|------------------
private | Apenas classe em si
protected | Classe e suas subclasses em qualquer assembly
internal | Qualquer código dentro do mesmo assembly (projeto/DLL)
protected internal | Subclasses ou mesmo assembly (união dos dois)
private protected | Subclasses no mesmo assembly (interseção — C# 7.2+)
public | Qualquer lugar (C# 11+)
Aplicado à classe Veiculo:
- O campo _senhaAlarme é private, acessível apenas por Veiculo e suas subclasses.
- _quilometragem é protected, acessível por Veiculo e suas subclasses.
- CodigoFrota é internal, acessível por qualquer classe do mesmo projeto.
- VelocidadeAtual tem getter público (todo mundo pode lê-la) e setter privado (só Veiculo pode alterá-la).
- Odometro tem getter protected internal (subclasses OU mesmo assembly podem ler) e setter apenas para subclasses.
Prática recomendada: Campos devem ser private, expor métodos de leitura controlados; métodos internos devem ser private; partes do contrato público da classe devem ser public; use protected apenas quando houver necessidade de herança e a subclasse precisar de acesso direto.
Written by urgent.news from Dev.to's reporting — not their text. Machine-written — may contain errors; check the original before relying on it.