eu tenho uma pergunta rápida; se eu declarar uma classe como privada em um espaço para nome dentro de uma montagem versus a classe sendo interna, posso acessar essa classe dentro da montagem nos dois casos, então qual é a diferença entre uma classe privada e uma classe interna? ou são modificadores privados e internos em termos de classes usados ao aninhar uma classe dentro da classe?
mayotic
2
Eu adicionei o projeto / montagem específico como referência de outro projeto e tanto o privado quanto o interno me impedem de acessar essa classe específica dentro do namespace, então, novamente ... a diferença entre classes privadas e internas é? graças
mayotic
9
Você não pode declarar uma classe de nível superior como privada. O compilador irá pará-lo.
TheGateKeeper
6
@NetSkay: Se você declarar uma classe privada dentro de uma classe pública, essa classe não poderá ser acessada por outras classes em sua montagem, mas se você declarar essa classe como interna, poderá ser acessada na montagem. Embora ambos não sejam acessíveis fora da montagem.
Yogesh Jindal
2
Se você é proveniente de um plano de fundo do VB.NET, a palavra-chave "interna" do C # é equivalente à palavra-chave "Amigo" do VB.NET.
Interessante que Protected Internalfornece acesso mais amplo do que Protected.
precisa
9
@ Dan, concordo plenamente. Pode ser útil ler e pensar protected internalcomo protected OR internal.
chessofnerd 9/09/16
7
O que With Typesignifica isso ?
James Wierzba
@ Dan sim, eu assumi que iria apenas agir como uma tabela de verdade e ANDessa matriz para true | false | false | false for protected internal. não é intuitivo. em vez disso, é verdadeiro | verdadeiro | verdadeiro | falso como se OR'd.
ferr 29/05
11
Aliás, o C # 7.2 acabou de adicionar um modificador "protegido E interno", embora as palavras-chave escolhidas private protectednão sejam muito intuitivas. Para obter detalhes: docs.microsoft.com/en-us/dotnet/csharp/language-reference/…
Joe Sewell
70
internalmembros são visíveis para todo o código no assembly em que estão declarados.
(E para outros assemblies referenciados usando o [InternalsVisibleTo]atributo )
privateOs membros são visíveis apenas para a classe declarante. (incluindo classes aninhadas)
Uma classe externa (não aninhada) não pode ser declarada private, pois não há escopo de contenção para torná-la privada.
Para responder à pergunta que você esqueceu de fazer, os protectedmembros são como privatemembros, mas também são visíveis em todas as classes que herdam o tipo de declaração. (Mas apenas em uma expressão de pelo menos o tipo da classe atual)
então qual é a diferença em usar isso? Eu ainda não entendo: X
deadfish
4
Privado é acessível somente dentro da Classe, Interno é acessível dentro da Assembléia (projeto no VS, isto é, arquivo dll / exe).
Jesper Fyhr Knudsen
3
Internal permitirá que você faça referência, digamos, a uma classe estática de Acesso a Dados (para segurança do encadeamento) entre várias classes de lógica de negócios, sem inscrevê-las para herdar essa classe / trip entre si em conjuntos de conexões e evitar a permissão de uma classe DAL promover o acesso ao nível público. Isso tem inúmeros apoios no design e nas melhores práticas.
O Entity Framework faz bom uso desse tipo de acesso
membros internos são acessíveis dentro da montagem (somente acessíveis no mesmo projeto)
membros privados são acessíveis na mesma classe
Exemplo para Iniciantes
Existem 2 projetos em uma solução (Projeto1, Projeto2) e o Projeto1 tem uma referência ao Projeto2.
O método público escrito no Projeto2 estará acessível no Projeto2 e no Projeto1
O método interno escrito no Projeto2 estará acessível apenas no Projeto2, mas não no Projeto1
O método privado escrito na classe1 do Projeto2 estará acessível apenas à mesma classe. Ele também não estará acessível em outras classes do Projeto 2 e não no Projeto 1.
Respostas:
internal é para escopo de assembly (ou seja, acessível apenas a partir do código no mesmo .exe ou .dll)
private é para o escopo da classe (ou seja, acessível apenas a partir do código da mesma classe).
fonte
Encontre uma explicação abaixo. Você pode verificar este link para obter mais detalhes - http://www.dotnetbull.com/2013/10/public-protected-private-internal-access-modifier-in-c.html
Privado: - Membros privados são acessíveis apenas dentro do próprio tipo (classe própria).
Interno: - O membro interno é acessível somente dentro da montagem por herança (seu tipo derivado) ou por instância da classe.
Referência:
dotnetbull - o que é modificador de acesso em c #
fonte
Protected Internal
fornece acesso mais amplo do queProtected
.protected internal
comoprotected OR internal
.With Type
significa isso ?AND
essa matriz para true | false | false | false forprotected internal
. não é intuitivo. em vez disso, é verdadeiro | verdadeiro | verdadeiro | falso como seOR'd
.private protected
não sejam muito intuitivas. Para obter detalhes: docs.microsoft.com/en-us/dotnet/csharp/language-reference/…internal
membros são visíveis para todo o código no assembly em que estão declarados.(E para outros assemblies referenciados usando o
[InternalsVisibleTo]
atributo )private
Os membros são visíveis apenas para a classe declarante. (incluindo classes aninhadas)Uma classe externa (não aninhada) não pode ser declarada
private
, pois não há escopo de contenção para torná-la privada.Para responder à pergunta que você esqueceu de fazer, os
protected
membros são comoprivate
membros, mas também são visíveis em todas as classes que herdam o tipo de declaração. (Mas apenas em uma expressão de pelo menos o tipo da classe atual)fonte
private - encapsulamentos na classe / escopo / estrutura '.
encapsulamento interno em montagens.
fonte
Os membros privados são acessíveis apenas no corpo da classe ou na estrutura em que são declarados.
Tipos ou membros internos são acessíveis apenas em arquivos no mesmo assembly
fonte
Internal permitirá que você faça referência, digamos, a uma classe estática de Acesso a Dados (para segurança do encadeamento) entre várias classes de lógica de negócios, sem inscrevê-las para herdar essa classe / trip entre si em conjuntos de conexões e evitar a permissão de uma classe DAL promover o acesso ao nível público. Isso tem inúmeros apoios no design e nas melhores práticas.
O Entity Framework faz bom uso desse tipo de acesso
fonte
membros internos são acessíveis dentro da montagem (somente acessíveis no mesmo projeto)
membros privados são acessíveis na mesma classe
Exemplo para Iniciantes
Existem 2 projetos em uma solução (Projeto1, Projeto2) e o Projeto1 tem uma referência ao Projeto2.
fonte