2010-07-30 39 views
11

¿Solo me pregunto si se heredan las variables privadas de nivel de clase? En C#¿Se heredan las variables privadas de nivel de clase?

+0

¿En qué idioma? –

+1

en C# perdón por eso –

+0

posible duplicado de [¿Los miembros privados son heredados en C#?] (Http://stackoverflow.com/questions/2950820/are-private-members-inherited-in-c) –

Respuesta

14

Sí, pero no son accesibles, por lo que puede decir honestamente que no son heredados. Pero sí, realmente son

4

Depende del idioma, pero en general, no; solo están accesibles en la clase en la que están definidos.

+0

Pero generalmente son parte de la instancia (incluso si el idioma impide el acceso). –

11

Se heredan, pero la palabra clave "privado" significa que solo la clase en la que se declararon puede acceder a ellos. Esto excluye subclases. Sin embargo, debido a que una instancia de una subclase contiene su propia superclase, todavía están allí. Simplemente no puedes verlos directamente.

Si está buscando un campo que solo la clase declarante y sus subclases puedan ver, puede usar la palabra clave "protected" en lugar de "private", y eso debería proporcionar la funcionalidad que está buscando.

3

Son, aunque no son accesibles directamente.

public class BaseClass 
{ 
    private const int _aNumber = 5; 
    public int ReturnANumber() { return _aNumber; } 
} 

public class DClass : BaseClass 
{ 
    public void SomeMethod() 
    { 
     // This is indirectly accessing a private implemented in the class 
     // this derives from, but existing inside this class. 
     int numbery = this.ReturnANumber(); 
    } 
} 

public class Whatever 
{ 
    public void AMethod(DClass someDClass) 
    { 
     int thisIsNumberFive = someDClass.ReturnANumber(); 
    } 
} 
7

Se heredan en un sentido. El espacio de memoria se les asigna y "existen" dentro de la instancia de la subclase. Sin embargo, la subclase no puede acceder a la variable en sí misma. (Si quiere que la subclase para acceder a la variable de clase base, utilice protected en lugar de private.)

Esto es necesario - los métodos de la clase base de necesidad de ser capaz de establecer la variable privada (o no habría ningún uso para ello). Esos métodos están disponibles también en una instancia de la subclase, y de hecho, la instancia de la subclase debe poder tratarse como una instancia de la clase base (requerida para satisfacer el Liskov substitution principle). Si las variables privadas no se heredaran, el comportamiento de los métodos de la clase base cambiaría o se rompería.

3

Sí, se heredan pero el compilador prohíbe el acceso a ellos. Aalas, todavía puedes conseguirlos -no recomendados- a través del reflejo o de tu agradable truco de AMethod().

3

Se heredan pero no son accesibles o solo se puede acceder a ellos en la clase donde se declaran. Puede acceder a ellos en la subclase de dos maneras

  1. declararlos protegida en lugar de privada
  2. escribir un método público que devuelve el valor de esa variable privada

    pero no hay manera de que usted directamente acceder a la variable privada en la subclase.

Cuestiones relacionadas