2012-02-10 19 views
6

De acuerdo con MSDN here y here (así como el accepted answer to this qstn), la accesibilidad predeterminada para enums es public. Sin embargo, este código:modificador de acceso predeterminado para enum en C#

public class Test 
{ 
    enum Color { RED, BLUE, GREEN }; 
    public void SetColor(Color c) { } 
} 

elevará este error de compilación:

Error 1 Inconsistent accessibility: parameter type 'Test.Color' is less accessible than method 'Test.SetColor(Test.Color)'

(que es el mismo error que se obtiene cuando se establece la enumeración como private.) Este error sólo puede ser resuelto modificando explícitamente enum como public. ¿La documentación es incorrecta?

[Estoy compilando con C# 2010 y .NET 4.0.]

+6

Eso hace referencia a la accesibilidad predeterminada de los * miembros * de la enumeración, no la enumeración en sí. –

+4

Los nombres de los miembros públicos de C#, incluidos los miembros enum, deben ser UpperCamelCase. – SLaks

Respuesta

10

Eso no es cierto.

La accesibilidad predeterminada para enum tipos es la misma que en cualquier otro tipo; interno para tipos de nivel superior y privado para tipos anidados.

Las páginas se ha vinculado a afirman que el valor predeterminado (y, de hecho, solamente) nivel de accesibilidad para ENUM miembros (Red, Blue, etc) es público.

4

Los artículos mencionados de MSDN y la respuesta SO hacen referencia a "enum member", es decir, por ejemplo, Test.Color.RED, no a Test.Color como enum.

Test.Color es un miembro de la clase - por lo tanto privado.

1

Creo que porque declaras dentro de la clase sin un modificador, se supone que es privado, ya que es el comportamiento estándar en una clase. Especifique el público que debería resolver el problema. Sin embargo, tenga en cuenta que Code Analysis recomendará que esta enumeración se coloque fuera de la clase.

-1

es porque usted no tiene público, protegido, interno en su enumeración, se toma el valor por defecto (que es interno para las clases y enumeraciones)

lo siento por la confusión, no se puede hacer pública la propiedad debido a que la enumeración es privado

la propiedad pública sería pública externa si alguien utilice su programa y el compilador le indica al respecto

2

Esa mesa está refiriendo a los miembros ; los miembros son "ROJO", "AZUL" y "GRUESO", y de hecho son constantes literales públicas, y la accesibilidad especifica no está permitida.

Contraste, por ejemplo, con los miembros de una clase (campos, métodos, constantes, etc.); aquí, según la tabla, el valor predeterminado es "privado", aunque puede especificar mayor accesibilidad.

Cuestiones relacionadas