2012-02-10 20 views
6

In base a MSDN here e here (nonché allo accepted answer to this qstn), l'accessibilità predefinita per enumerazione è public. Tuttavia, questo codice:modificatore di accesso predefinito per enum in C#

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

solleverà questo errore di compilazione:

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

(che è lo stesso errore che si ottiene quando si imposta l'enum come private.) Questo errore può essere solo risolto modificando esplicitamente enum come public. La documentazione è errata?

[Sto compilando con C# 2010 e .NET 4.0.]

+6

Ciò fa riferimento all'accessibilità predefinita dei * membri * dell'enumerazione, non all'enum stesso. –

+4

I nomi dei membri pubblici C#, inclusi i membri di enum, devono essere UpperCamelCase. – SLaks

risposta

10

Questo non è vero.

L'accessibilità predefinita per i tipi enum è uguale a qualsiasi altro tipo; interno per i tipi di livello superiore e privato per i tipi nidificati.

Le pagine collegate a dichiarare che il valore predefinito (e, infatti, solo) livello di accessibilità per enum membri (Red, Blue, ecc) è pubblico.

4

Gli articoli MSDN menzionati e la risposta SO si riferiscono a "membro enum" - ad esempio, Test.Color.RED, non Test.Color come enum stesso.

Test.Color è un membro di classe, quindi privato.

1

Credo che poiché si dichiara all'interno della classe senza un modificatore, si presume che sia privato in quanto è il comportamento standard in una classe. Specifica il pubblico che dovrebbe risolvere il problema. Tuttavia, si noti che l'analisi del codice raccomanderà che questo enum sia collocato al di fuori della classe.

-1

è perché non avete pubblico, protetto, interna sul enum, si assume il valore di default (che è interno per le classi e le enumerazioni)

dispiace per la confusione, non si può fare il pubblico di proprietà perché l'enum è privato

la proprietà pubblica sarebbe esternamente pubblico dovrebbe qualcuno utilizzare il programma e il compilatore ti dice su di esso

2

Questa tabella si riferisce ai membri ; i membri sono "RED", "BLUE" e "GREEEN" e sono effettivamente costanti letterali pubblici e le specifiche di accessibilità non sono consentite.

Contrasto, ad esempio, membri di una classe (campi, metodi, costanti, ecc.); qui, come da tabella, il valore predefinito è "privato", sebbene sia possibile specificare una maggiore accessibilità.

Problemi correlati