que publicas protegidas propiedad programacion privadas operadores modificadores modificador entre diferencia delimitadores clases acceso c# .net access-modifiers

c# - publicas - ¿Cuál es la diferencia entre ''protegido'' y ''protegido interno''?



public private protected c# (10)

El modificador de acceso "protegido interno" es una unión de los modificadores "protegido" e "interno".

Desde MSDN, modificadores de acceso (Guía de programación de C #) :

protected

Se puede acceder al tipo o miembro solo por código en la misma clase o estructura, o en una clase derivada de esa clase.

internal :

Se puede acceder al tipo o miembro mediante cualquier código en el mismo ensamblaje, pero no desde otro ensamblaje.

protegido interno :

Se puede acceder al tipo o miembro mediante cualquier código en el ensamblaje en el que se declara, O desde una clase derivada en otro ensamblaje. El acceso desde otro conjunto debe tener lugar dentro de una declaración de clase que se deriva de la clase en la que se declara el elemento interno protegido, y debe tener lugar a través de una instancia del tipo de clase derivado.

Tenga en cuenta que : protected internal significa " protected O internal " (cualquier clase en el mismo conjunto, o cualquier clase derivada, incluso si está en un conjunto diferente).

... y para completar:

private

Se puede acceder al tipo o miembro solo por código en la misma clase o estructura.

public

Se puede acceder al tipo o al miembro mediante cualquier otro código en el mismo conjunto u otro conjunto que lo haga referencia.

protegido privado

El acceso está limitado a la clase que contiene o los tipos derivados de la clase que contiene dentro del conjunto actual.
( Disponible desde C # 7.2 )

¿Puede alguien explicarme la diferencia entre los modificadores ''protegidos'' y los ''internos protegidos'' en C #? Parece que se comportan de la misma manera.


En la práctica, sobre los métodos:

protegido - accesible para clases heredadas, de lo contrario privado.

interno - público solo para clases dentro de la asamblea, de lo contrario privado.

protegido interno : significa protegido o interno: los métodos se vuelven accesibles para las clases heredadas y para cualquier clase dentro del ensamblaje.


He leído definiciones muy claras para estos términos.

Protegido: el acceso está limitado dentro de la definición de clase y cualquier clase que herede de la clase. Se puede acceder al tipo o miembro solo por código en la misma clase o estructura o en una clase derivada de esa clase.

Interno: el acceso se limita exclusivamente a las clases definidas en el conjunto del proyecto actual. Se puede acceder al tipo o miembro solo por código en la misma clase.

Protected-Internal: el acceso está limitado al ensamblaje actual o a los tipos derivados de la clase contenedora.


Las mejores suites internas protegidas cuando desea que un miembro o tipo se utilice en una clase derivada de otro conjunto al mismo tiempo, solo quiere consumir el miembro o tipo en el conjunto primario sin derivar de la clase donde se declara. Además, si solo desea usar un miembro o un tipo sin derivar de otra clase, en el mismo ensamblaje puede usar solo interno.


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


Todavía hay mucha confusión en la comprensión del alcance de los accesores "protegidos internos", aunque la mayoría tiene la definición definida correctamente. Esto me ayudó a comprender la confusión entre "protegido" e "protegido interno":

público es realmente público dentro y fuera de la asamblea ( público interno / público externo )

Protegido está realmente protegido dentro y fuera del ensamblaje ( protegido interno / externo protegido ) (no permitido en las clases de nivel superior)

privado es realmente privado dentro y fuera del conjunto ( privado interno / privado externo ) (no permitido en las clases de nivel superior)

interno es realmente público dentro de la asamblea pero excluido fuera de la asamblea como privado ( público interno / externo excluido )

protegido interno es realmente público dentro del conjunto pero protegido fuera del conjunto ( público interno / externo protegido ) (no permitido en las clases de nivel superior)

Como puedes ver protegido interno es una bestia muy extraña. No intuitivo.

Eso plantea ahora la pregunta ¿por qué Microsoft no creó un ( protegido interno / externo excluido ), o supongo que algún tipo de "protección privada" o "protección interna"? jajaja Parece incompleto?

A la confusión se añade el hecho de que puede anidar miembros anidados internos públicos o protegidos dentro de tipos protegidos, internos o privados. ¿Por qué accedería a una "protección interna" anidada dentro de una clase interna que excluye el acceso al ensamblaje externo?

Microsoft dice que tales tipos anidados están limitados por su alcance de tipo padre, pero eso no es lo que dice el compilador. Puede compilar elementos internos protegidos dentro de clases internas, lo que debería limitar el alcance solo al ensamblaje.

Para mí esto se siente como un diseño incompleto. Deben haber simplificado el alcance de todos los tipos a un sistema que considere claramente la herencia, pero también la seguridad y la jerarquía de los tipos anidados. Esto hubiera hecho que compartir objetos sea extremadamente intuitivo y granular en lugar de descubrir la accesibilidad de tipos y miembros basados ​​en un sistema de alcance incompleto.


protected puede ser utilizado por cualquier subclase de cualquier conjunto.

protected internal es todo lo que es protected , y también cualquier elemento del mismo conjunto puede acceder a él.

Es importante destacar que no significa "subclases en el mismo ensamblaje", es la unión de las dos, no la intersección.


Miembro Protegido

Miembro protegido de una clase solo disponible en la clase contenida (en la que se ha declarado) y en la clase derivada dentro del ensamblaje y también fuera del ensamblaje.

Significa si una clase que reside fuera del conjunto puede usar el miembro protegido del otro conjunto heredado solo de esa clase.

Podemos exponer el miembro Protegido fuera del conjunto heredado de esa clase y usarlo solo en la clase derivada.

Nota: los miembros protegidos no son accesibles usando el objeto en la clase derivada.

Miembro interno

El miembro interno de una clase está disponible o tiene acceso dentro del ensamblaje, ya sea creando un objeto o en una clase derivada, o puede decir que es accesible a través de todas las clases dentro del ensamblaje.

Nota: los miembros internos no son accesibles fuera del ensamblaje, ya sea que utilicen la creación de objetos o en una clase derivada.

Interno protegido

Protected Internal access modifier es una combinación Protected o Internal.

El Miembro interno protegido puede estar disponible dentro del ensamblaje completo en el que se declaró creando un objeto o heredando esa clase. Y puede ser accesible fuera del ensamblaje solo en una clase derivada.

Nota: El miembro interno protegido funciona como interno dentro del mismo conjunto y funciona como protegido para fuera del conjunto.


público : se puede acceder a los miembros (funciones y variables) declarados como públicos desde cualquier lugar.

privado : no se puede acceder a los miembros privados desde fuera de la clase. Este es el especificador de acceso predeterminado para un miembro, es decir, si no especifica un especificador de acceso para un miembro (variable o función), se considerará como privado. Por lo tanto, string PhoneNumber; es equivalente a la cadena privada PhoneNumber.

protegido : solo se puede acceder a los miembros protegidos desde las clases secundarias.

interno : solo se puede acceder dentro del mismo ensamblaje.

protegido interno : se puede acceder dentro del mismo ensamblaje, así como en la clase derivada.


protegido : la variable o el método estarán disponibles solo para las clases secundarias (en cualquier ensamblaje)

protegido interno : disponible para las clases secundarias en cualquier ensamblaje y para todas las clases dentro del mismo ensamblaje