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.

¿Fue útil?

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 #) :

protegido :

  

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:

privada

  

El tipo o miembro sólo se puede acceder por código en la misma clase o   struct.

público

  

El tipo o miembro puede acceder a cualquier otro código en el mismo   montaje u otro montaje que hace referencia a él.

privada protegida

  

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

- Actualización de respuesta 2019 -

Puede encontrar la diferencia en la accesibilidad basada siguiente tabla es sí,

 introducir descripción de la imagen aquí

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top