2010-09-02 23 views
13

Quiero saber cuál es el significado de protected en C#, por qué lo utilizamos y el beneficio de la palabra clave?Palabra clave protegida C#

Por ejemplo

protected int currentColorIndex;

favor detalles.

+5

Parece que * debe * ser un duplicado, pero no puedo encontrar exactamente la misma pregunta en otro lugar en SO. – serg10

+1

Ahora que tiene los fundamentos por debajo de estas respuestas, es posible que desee profundizar en algunas de las muchas sutilezas. Ver http://blogs.msdn.com/b/ericlippert/archive/tags/protected/ para algunos de ellos. –

+0

relacionado: http://stackoverflow.com/questions/3500298/what-is-the-difference-between-access-specifier-protected-and-internal-protected –

Respuesta

14

"Un miembro protegido es accesible desde dentro de la clase en la que se declaró, y desde dentro de cualquier clase derivada de la clase que declaró este miembro."

ver

http://msdn.microsoft.com/en-us/library/bcd5672a(VS.71).aspx

+5

-1: No responde la pregunta "¿por qué usamos eso". – Timwi

+0

pero señor en lugar de declarar protegido también podemos utilizar como privado según su respuesta. –

+3

@Nishant - no es así: 'privado' restringe los miembros para ser utilizados solo por esta clase y no visibles para ninguna otra clase. –

3

Esto significa que el campo es visible sólo para la propia clase y clases heredadas.

7

Directamente desde el MSDN:

La palabra clave protegida es un modificador de acceso miembro. Se puede acceder a un miembro protegido dentro de su clase y por instancias de clases derivadas.

Source

Uso protegida significa que puede tener funcionalidad en una clase que está disponible para las clases derivadas, pero no a las clases que solo una instancia del objeto.

This page compara los diferentes modificadores de acceso y explica lo que significan y proporciona una tabla de modificadores predeterminados para diferentes objetos (enumeración, clase, interfaz y estructura).

6

Definición en otra respuesta. ¿Por qué es esto bueno? No tiene que duplicar datos/código de la clase base a sus clases derivadas cuando protected les ofrece acceso a implementaciones de la clase base, sin la exposición no deseada al uso externo no restringido que estaría implícito en public.

14

como ya se ha señalado:

La palabra clave protegida es un modificador de acceso miembro de . Un miembro protegido es accesible dentro de su clase y por instancias de clase derivadas.

Aquí hay un pequeño ejemplo: respuesta

public class A 
{ 
    protected string SomeString; 
    public string SomeOtherString; 
} 

public class B : A 
{ 
    public string Wrapped 
    { 
     get { return this.SomeString; } 
    } 
} 

... 

var a = new A(); 
var s = a.SomeOtherString; // valid 
var s2 = a.SomeString; // Error 

var b = new B(); 
var s3 = b.Wrapped; // valid 
+0

buena explicación señor .... –

+0

gracias por una explicación clara y buena señor –

+0

De nada. –

31

de cada persona es similar (una definición y/o un extracto/enlace a MSDN), tan mal intento de responder a sus originales 3 preguntas:

El significado:

Cualquier campo marcado con 'protegido' significa que solo es visible para él y para los niños (clases que lo heredan). Lo notarás en la ASP.El código de NET Web Forms detrás del modelo, los manejadores de eventos (como Page_Load) están marcados como 'protected'. Esto se debe a que el archivo de marcado ASPX en realidad hereda del archivo de código subyacente (consulte la directiva @Page para probarlo).

Por qué lo usamos:

El uso común del modificador de acceso protegido es dar a los niños el acceso a sus propiedades padres. Es posible que tenga una clase base de la que derivan muchas subclases. Esta clase base puede tener una propiedad común. Este es un buen caso para una propiedad protegida: para facilitar la reutilización y el mantenimiento central de la lógica común.

El Beneficio:

tipo de pregunta similar a "¿por qué lo usamos?" Pero esencialmente da un control de grano grueso sobre las propiedades. No puedes pensar en "cuando uses protegido". Se trata más bien de elegir cuándo usar qué modificador de accesibilidad (privado, público, interno, protegido). Entonces, el beneficio es realmente el mismo beneficio de cualquier modificador de accesibilidad: proporcionar un modelo de objetos robusto y consistente, maximizar la reutilización del código y minimizar los riesgos de seguridad asociados con el código incorrectamente expuesto.

Espero que ayude.

+0

¿Es posible acceder a un método protegido dentro de una clase abstracta o necesitamos anularlo? Por ejemplo, tengo una clase llamada "Papá" que tiene un método 'protected void WalkingAndRunning()'. La clase "Papá" es heredada por la clase "Hijo". ¿Es posible utilizar allí el método 'protected void WalkingAndRunning()'? Sólo curioso. – Musikero31

3

Piénsalo así. Una clase presenta tres interfaces:

  1. Hacia , con pleno acceso a los detalles internos de implementación (protegidas, métodos públicas, privadas y atributos). Por definición, cualquier cosa que hagas en una clase puede afectar cualquier otra cosa.
  2. Hacia sus clientes , con acceso solo a los métodos y atributos públicos. Minimiza la interfaz pública de una clase para minimizar las consecuencias inesperadas de los cambios: cuanto menos conozca el código sobre su funcionamiento interno, más libremente podrá modificarlo más adelante.
  3. Hacia su descendientes, con acceso al público y los métodos y atributos protegidos. Lo que sea que hagas con los métodos públicos y protegidos afectará no solo a los clientes, sino también a los descendientes que modifican la funcionalidad básica de tu clase. OO se trata de reducir coupling y aumentar cohesion: no existe un acoplamiento más fuerte entre las clases que la relación de herencia (bueno, aparte de la C++ friend, por supuesto)!

La tercera interfaz es el desafío diseño general más difícil en OO: lo que razonablemente pueda ser anulado (métodos virtuales y propiedades), y con el fin de anular, lo que otra funcionalidad se necesita (métodos y atributos llanura protegidas)? Debido a que este es un desafío, tener clases sealed de manera predeterminada es en realidad una buena idea, contraintuitivo ya que a los principiantes de OO les parece contradictorio, para quienes parece una desventaja innecesaria.