2010-08-17 13 views
6

¿Cuál es la diferencia entre el especificador de acceso protected y internal protected en C#?Cuál es la diferencia entre el especificador de acceso protegido y el interno protegido en C#

+0

posible duplicado de [Lo que significa interna protegida en .Net] (http://stackoverflow.com/questions/2651137/what-does-protected-internal-means-in-net) y [¿Cuál es la diferencia entre 'protegido' y 'protegida interna'?] (http://stackoverflow.com/questions/585859/what-is-the-difference-between-protected-and-protected-internal) –

Respuesta

10

Internal se puede ver en el conjunto.

Protected se puede ver por las clases que heredan de la clase donde se define.

Protected internal se puede ver en el conjunto O tipos derivados de la clase donde se define (incluidos los tipos de otros conjuntos).

Ver: http://msdn.microsoft.com/en-us/library/ba0a1yw2.aspx

Copiado de la página:

public    Access is not restricted. 
protected   Access is limited to the containing class or types derived from the containing class. 
internal   Access is limited to the current assembly. 
protected internal Access is limited to the current assembly or types derived from the containing class. 
private    Access is limited to the containing type. 
+0

Cuál es el punto de interna protegida? ¿No estaría protegido por sí mismo haciendo exactamente lo mismo? –

+0

@Vince, No, si es 'protegida internal' y que se derivan de la clase en otro montaje, que no tendría acceso al método etc, pero si sólo era' protected' lo haría. –

+0

Si no tengo acceso al método en el otro ensamblaje, entonces simplemente podría marcarlo interno en lugar de protegido interno. ¿Me estoy perdiendo de algo? :) –

0

internal protected le permite acceder a los miembros dentro del mismo conjunto de clases que no se derivan de un mismo objeto, sino que también permite el estándar protegida acceso que obtienes para acceder a los miembros de otra asamblea. Es interno | protegido, no interna & protegido (aunque el CLR permite que el último, C# no lo hace)

+1

http://msdn.microsoft.com/en-us/library/ba0a1yw2.aspx. –

+0

Uh, ¿qué estoy buscando? –

+0

Desde mi entender, protegida interna no tiene sentido, interna protegida es el mismo que el protegido y le permite hacer exactamente lo mismo –

1

internal protected o protected internal que es el mismo medio externamente protected (desde fuera del conjunto actual) e internamente public (desde dentro del mismo conjunto).

2

protected significa que solo la clase actual y las clases que se derivan de ella tienen acceso al miembro.

internal significa que cualquier clase dentro del ensamblaje actual tiene acceso al miembro.

protected internal significa esencialmente protectedointernal; es decir, todas las clases que se derivan de la clase actual (en cualquier conjunto) tienen acceso al miembro, como lo hacen todas las clases en el conjunto actual. Esto está en contraste con lo que muchos desarrolladores esperan - que protected internal significaría lo mismo que protectedyinternal (no es así).

2
  • internal - Visible por cualquier cosa dentro del mismo conjunto (.dll o .exe).
  • protected - Visible por cualquier subclase, sin importar dónde se encuentre.
  • internal protected - visible por cualquier cosa dentro del mismo conjunto y cualquier sub-clases, sin importar dónde se encuentren.

La forma en que Jeff Mattfield dice "interna reduce aún más esa visibilidad" no deja claro. internal y protected son simplemente visibilidades diferentes. Tener ambos juntos hace que el miembro más sea visible. La visibilidad predeterminada de algo sin modificadores de acceso explícitos es lo más pequeña posible. Agregar cualquier modificador de acceso siempre aumenta la visibilidad.

1

Protegido interno y protegido especificador de acceso se refieren al concepto de herencia.

Tomemos el ejemplo para explicar protegido y protegido interno.

Hay dos espacios de nombres llamados namespace A y namespace B.

En espacio de nombres A, hay una clase llamada classA que consiste en un método denominado aceptar() usando protegido especificador de acceso.

En espacio de nombres B, hay otra clase, llamada ClassB, que hereda de classA del espacio de nombres Un.

Ahora, con la ayuda de este protegida especificador podemos acceder a esa aceptar() método en el ClassB de espacio de nombres B.

Pero este concepto no es cierto cuando se utiliza el especificador acceso interno protegida: si aceptar() función de classA de espacio de nombres Una estaba usando protegida especificador interna acceso, a continuación, ClassBdel espacio de nombres B no puede acceder a él a causa de que aceptar() función sólo se puede acceder dentro de la clase heredada dentro del mismo espacio de nombres.

0

Para entender mejor la diferencia entre protegido y protegido Internal.it es mejor saber primero qué es la diferencia entre Protegida e interna.

Variable interna se refieren a assembly.Yo misma no puede acceder en montaje diferente. variable protegida como variable privada, pero puede acceder en la clase manejada en el mismo ensamblaje o diferente.

namespace InternalTest ----This namespace in assembly One 
{ 
    Public class A 
    { 
     B ol=new B(); 
     Console.WriteLine(ol.x);//Output:5 
     Console.WriteLine(ol.y);//error will occured. Because protected is like Private variable 
    } 

    public class B 
    { 
     Internal int x=5; 
     Protected int y=5; 

     } 
} 

2) Tomar el montaje diferente.

 using InternalTest; 
    namespace InternalTest1 ----This namespace in assembly Two 
    { 
     Public class A1:B 
     { 
      Public void GetInternalValue() 
      {      return x; //error can't access because this is internal 

      } 

      Public void GetProtectedValue() 
      { 
       return y;//Work because it's protected 

      } 
     } 
     public class C 
     { 


     } 

    } 

del ejemplo anterior se borra se puede acceder interna mismo conjunto, pero no en diferentes assembly.You puede decir en mismo conjunto que le gusta mirar variable.you pública puede asignar un valor al crear objeto de la clase

3) interno protegido tiene bondad de ambos en el mismo conjunto que parece variable pública. en el montaje diifrent utiliza como variable de protección

-1

PROTEGIDA

Si la clase se declara como "protegido" significa que se puede acceder por la clase hija dentro del conjunto, así como la clase del niño desde fuera del ensamblaje .

INTERNO

Si la clase se declara como "interno" significa que se puede acceder por cualquier clase dentro del conjunto.

interna protegida

Si la clase se declara como "protegido interno" significa que se puede acceder dentro del conjunto por sólo su clase derivada.

Cuestiones relacionadas