¿Cuál es la diferencia entre 'protegido' y 'protegidos interna'?
-
06-09-2019 - |
Pregunta
Por favor alguien puede elaborar la diferencia entre los modificadores '' protegidas internas en C # 'protegido' y? Parece que se comportan de la misma manera.
Solución
El modificador de acceso "interna protegida" es un unión tanto de la "protegido" y modificadores "interno".
MSDN, modificadores de acceso (Guía de programación de C #) :
El tipo o miembro sólo se puede acceder por código en la misma clase o struct, o en una clase que se deriva de esa clase.
interna :
El tipo o miembro se puede acceder por cualquier código en el mismo conjunto, pero no de otro conjunto.
interna protegida :
El tipo o miembro se puede acceder por cualquier código en el conjunto en el que se declara, o desde dentro de una clase derivada en otro montaje. El acceso desde otra asamblea debe tener lugar dentro de una clase declaración que se deriva de la clase en la que el protegido elemento interno se declara, y debe llevarse a cabo a través de una instancia del tipo de clase derivada.
Nota que : protected internal
significa "protected
O internal
" (cualquier clase en el mismo conjunto, o cualquier clase derivada - incluso si es en un conjunto diferente)
... y para lo completo:
El tipo o miembro sólo se puede acceder por código en la misma clase o struct.
El tipo o miembro puede acceder a cualquier otro código en el mismo montaje u otro montaje que hace referencia a él.
acceso está limitado a la clase que contiene o tipos derivados de la que contiene la clase dentro del conjunto actual.
( Disponible desde C # 7.2 )
Otros consejos
protected
puede ser utilizado por cualquier subclase de cualquier montaje.
protected internal
es todo lo que protected
es, además también cualquier cosa en el mismo conjunto puede acceder a él.
Es importante destacar que esto no significa que "las subclases en la misma asamblea" - es la unión de los dos, no la intersección
.En la práctica, sobre los métodos de:
protegido -. Accesible para las clases heredadas, de lo contrario privada
interno -. Público sólo para las clases dentro de la asamblea, de lo contrario privada
interna protegida - significa protegidas o internos -. Métodos se hacen accesibles para las clases heredadas y para cualquier clase en el interior del conjunto
Todavía hay mucha confusión en la comprensión del alcance de métodos "internos" protegidos, aunque la mayoría tienen la definición definida correctamente. Esto me ayudó a entender la confusión entre "protegido" y "interna protegida":
público es realmente público dentro y fuera del conjunto ( pública interna / externa pública )
protegido es realmente protegidos en el interior y el exterior del conjunto ( protegida interna / externa protegida ) (no permitido en clases de nivel superior)
privado es realmente privado en el interior y el exterior del conjunto ( privada interna / externa privada ) (no permitido en clases de nivel superior)
interno es realmente pública dentro del conjunto, pero excluido el exterior del conjunto como privada ( pública interna / externa excluido )
interna protegida es realmente público dentro del conjunto pero protegido el exterior del conjunto ( público interno / externo protegido ) (No permitido en clases de nivel superior)
Como se puede ver en interna protegida es un animal muy extraño. No es intuitivo.
Que ahora nos lleva a la pregunta de por qué no crear una Microsoft ( protegida interna / externa excluido ), o supongo que algún tipo de "privada protegida" o "interna protegida"? lol. Parece incompleto?
Añadido a la confusión es el hecho de que pueda pública nido o miembros anidados internas protegidas dentro protegidas, o tipos privadas internas. ¿Por qué le acceder a un anidado "interna protegida" dentro de una clase interna que excluye el acceso de montaje exterior?
Microsoft dice que tales tipos anidados están limitadas por su alcance tipo padre, pero eso no es lo que dice el compilador. Puede compilado partes internas protegidas dentro de las clases internas que deben limitar el alcance de sólo el montaje.
Para mí esto se siente como diseño incompleto. Deben tener alcance simplificada de todos los tipos a un sistema que considere claramente la herencia, sino también la seguridad y la jerarquía de tipos anidados. Esto habría hecho que el intercambio de objetos extremadamente intuitivos y granulares en lugar de descubrir la accesibilidad de los tipos y miembros sobre la base de un sistema de alcance incompleta.
protegido : la variable o método estarán disponibles sólo para clases hijas (en cualquier montaje)
interna protegida : disponible para las clases hijas en cualquier asamblea y a todas las clases dentro del mismo conjunto
He leído definiciones muy claras para estos términos.
Protegido: El acceso está limitado a dentro de la definición de clase y de cualquier clase que hereda de la clase. El tipo o miembro sólo se puede acceder por el código de la misma clase o estructura o en una clase que se deriva de esa clase.
Interno: El acceso está limitado a exclusivamente a las clases definidas dentro del conjunto del proyecto actual. El tipo o miembro sólo se puede acceder por el código en el misma clase.
Protected-interno:. El acceso está limitado al montaje actual o tipos derivados de que contiene clase
protegido Miembro
miembro protegido de una clase en sólo está disponible en la clase de contenido (en el que ha sido declarado) y en la clase derivada dentro del conjunto y también el exterior del conjunto.
significa que si una clase que reside fuera el conjunto puede utilizar el miembro protegido del otro conjunto por heredado solamente esa clase.
Podemos expuesto el miembro protegido el exterior del conjunto por heredado esa clase y utilizarlo en la clase derivada solamente.
Nota:. Protegida miembros no son accesibles mediante el objeto en la clase derivada
Miembro Interno
Miembro interna de una clase está disponible o el acceso dentro del conjunto, ya sea la creación de objeto o en una clase derivada o se puede decir que es accesible a través de todas las clases dentro del conjunto.
Nota:. Miembros internos no accesible fuera del conjunto, ya sea usando objeto la creación o en una clase derivada
interna protegida
modificador de acceso protegido interna es combinación protegido o internos.
protegido Miembro interna puede estar disponible dentro de todo el conjunto en la que declaró ya sea la creación de objeto o por heredado esa clase. Y puede ser accesible el exterior del conjunto sólo en una clase derivada.
Nota:. Protegido Miembro Interno trabaja como interna dentro del mismo conjunto y trabaja como protegido por el exterior del conjunto
público -. Los miembros (Funciones y variables) declaran como público puede acceder desde cualquier lugar
privado - Los miembros privados no se puede acceder desde fuera de la clase. Este es el especificador de acceso predeterminado para un miembro, es decir, si no se especifica un especificador de acceso para un miembro (función o variable), que será considerado como privado. Por lo tanto, la cadena Fax; es equivalente a Fax cadena privada.
protegido -. Protegida miembros sólo se puede acceder desde las clases hijas
interna -. Se puede acceder sólo dentro del mismo conjunto
interna protegida -. Se puede acceder dentro del mismo conjunto, así como en clase derivada
Protegida mejores suites internos cuando se desea un miembro o escribe a ser utilizados en una clase derivada de otra asamblea, al mismo tiempo que sólo quieren consumir el miembro o escribe en el ensamblaje padre sin que deriva de la clase en la que se declara. Además, si desea utilizar solamente un miembro o escriba a cabo deriva de otra clase, en la misma asamblea se puede utilizar exclusivamente interno.