Si crearé un objeto nuevo como el siguiente, ¿qué modificador de acceso tendrá de forma predeterminada?Modificador de acceso predeterminado en C#
Object objectA = new Object();
Si crearé un objeto nuevo como el siguiente, ¿qué modificador de acceso tendrá de forma predeterminada?Modificador de acceso predeterminado en C#
Object objectA = new Object();
Cualquier miembro tendrá siempre la más restrictiva posible - por lo que en este caso la accesibilidad de objectA
es private
. (Asumiendo que es una variable de instancia No tiene sentido como una variable local, ya que no tienen ningún reglas de acceso como tales..)
Así que esto:
class Foo
{
Object objectA = new Object();
}
es equivalente a esto:
internal class Foo
{
private Object objectA = new Object();
}
El "predeterminado para el más privado" significa que para los tipos, la accesibilidad depende del contexto. Este:
class Outer
{
class Nested
{
}
}
es equivalente a esto:
internal class Outer
{
private class Nested
{
}
}
... porque no se puede tener una clase privada no anidada.
Sólo hay una lugar en el que la adición de un modificador de acceso explícita puede hacer algo más privado que es sin lugar, y eso es en las declaraciones de propiedad:
public string Name { get; set; } // Both public
public string Name { get; private set; } // public get, private set
Como miembro de la clase: private
.
Si se trata de una variable local declarada dentro del cuerpo de un método, no tiene acceso fuera de ese método. Pero supongo que ya lo sabías.
void Foo()
{
// private in method scope
Object objectA = new Object();
}
class Bar()
{
// private in class scrope
Object objectA = new Object();
}
Es privados por defecto.
La clase/tipo en sí será por defecto "interno". El objeto que cree estará predeterminado en "privado".
¡Las clases y las estructuras se declaran como internas por defecto!
Leer más here
Los tipos anidados no son ... ver mi respuesta. –
El OP pregunta por objetos, no por tipos. –
@Jon Skeet, TNX por la gran respuesta !!! – rudigrobler
Para miembros de la clase y los miembros de la estructura, incluyendo clases anidadas y estructuras, privado es el valor predeterminado.
Para clases y las estructuras internas - es el valor predeterminado
Se puede extraer de MSDN para la lectura adicional ..
ma nishma haver! eifo ata gar? ani garti be kiryat gat. –
Creo que debería marcar la respuesta de Jon Skeet como la aceptada. –
raziti laasot masheu naim leha. ani ihaol livhor lemi latet et nekudot. Haval. lo garti sea israel 6 shanim, ve ze haia naim meod lepagesh po mishehu mi aaretz. –
El especificador de acceso de clase es interna.
El especificador de acceso de una variable es privado.
Parece que debe incluir un campo de miembro real en una de esas clases y mostrar que también se traduce como 'privado ', ¿no? Me parece que esa es la principal pregunta en la mente del OP: el acceso a los campos de miembros. –
@Dan: ¿No se explica eso en la primera oración? El ejemplo pretendía demostrar cómo para * tipos * el acceso predeterminado puede variar según el contexto. Es información adicional, después de responder la pregunta real en la primera oración. –
@Jon: Sí, pensé que sería especialmente ilustrativo incluirlo en la muestra del código real; eso es todo. Creo que es bueno que muestres la equivalencia entre el código con y sin los modificadores. –