Junior
Quais são os modificadores de acesso em C#?
sobes.tech IA
Resposta da IA
Em C# existem os seguintes modificadores de acesso:
- public: O acesso não é restrito. Os membros marcados como
publicsão acessíveis de qualquer lugar onde o seu tipo contenedor seja acessível. - private: O acesso é restrito ao seu tipo contenedor. Os membros marcados como
privatesão acessíveis apenas a partir do código dentro da mesma classe ou estrutura. - protected: O acesso é restrito ao tipo que o contém ou aos tipos derivados desse tipo. Os membros marcados como
protectedsão acessíveis dentro da sua classe e nas classes derivadas. - internal: O acesso é restrito à compilação atual (.dll ou .exe). Os membros marcados como
internalsão acessíveis de qualquer lugar dentro da mesma compilação. - protected internal: O acesso é restrito à compilação atual ou aos tipos derivados do tipo que o contém em outras compilations. É uma combinação de
protectedeinternal. - private protected: O acesso é restrito ao tipo que o contém ou aos tipos derivados desse tipo apenas na mesma compilação. É uma combinação de
privateeprotected.
// Exemplo de uso de modificadores de acesso
public class MyClass
{
public int PublicField; // Acessível de qualquer lugar
private int PrivateField; // Acessível apenas dentro de MyClass
protected int ProtectedField; // Acessível dentro de MyClass e em classes derivadas
internal int InternalField; // Acessível dentro da compilação atual
protected internal int ProtectedInternalField; // Acessível dentro da compilação atual OU em classes derivadas
private protected int PrivateProtectedField; // Acessível dentro de MyClass OU em classes derivadas nesta mesma compilação
void MyMethod()
{
PrivateField = 10; // OK
}
}
public class DerivedClass : MyClass
{
void DerivedMethod()
{
ProtectedField = 20; // OK
// PrivateField = 30; // Erro - campo privado não acessível na herança
ProtectedInternalField = 40; // OK
PrivateProtectedField = 50; // OK
}
}
public class AnotherClassInSameAssembly
{
void AnotherMethod()
{
MyClass mc = new MyClass();
mc.PublicField = 1; // OK
mc.InternalField = 2; // OK
mc.ProtectedInternalField = 3; // OK
// mc.PrivateField = 4; // Erro
// mc.ProtectedField = 5; // Erro
// mc.PrivateProtectedField = 6; // Erro
}
}