2010-09-09 17 views

risposta

32

Ogni membro avrà sempre il più restrittivo disponibili - quindi in questo caso l'accessibilità dei objectA è private. (Ammesso che sia una variabile di istanza Non ha senso come variabile locale, in quanto non hanno alcuna regole di accesso in quanto tali..)

Quindi questo:

class Foo 
{ 
    Object objectA = new Object(); 
} 

equivale a questo:

internal class Foo 
{ 
    private Object objectA = new Object(); 
} 

Il valore "predefinito per la maggior parte dei privati" indica che per i tipi l'accessibilità dipende dal contesto. Questo:

class Outer 
{ 
    class Nested 
    { 
    } 
} 

è equivalente a questo:

internal class Outer 
{ 
    private class Nested 
    { 
    } 
} 

... perché non si può avere una classe privata non nidificato.

C'è solo un luogo in cui l'aggiunta di un modificatore di accesso esplicito può fare qualcosa di più privato di quello che è, senza, e che è nelle dichiarazioni di proprietà:

public string Name { get; set; } // Both public 

public string Name { get; private set; } // public get, private set 
+1

Sembra che dovresti includere un campo membro effettivo in una di queste classi e mostrare che si traduce anche in 'privato', no? Mi sembra che questa sia la domanda principale sulla mente dell'OP: l'accessibilità dei campi dei membri. –

+0

@Dan: non è quello spiegato nella prima frase? L'esempio intendeva dimostrare come per * tipi * l'accesso predefinito può variare in base al contesto. È un'informazione extra, dopo aver risposto alla domanda vera nella prima frase. –

+0

@Jon: Sì, ho pensato che sarebbe stato particolarmente indicativo includerlo nell'effettivo esempio di codice; È tutto. Penso che sia positivo mostrare l'equivalenza tra codice con e senza i modificatori. –

2

Come membro della classe: private.

Se è una variabile locale dichiarata all'interno del corpo di un metodo, non ha accessibilità al di fuori di tale metodo. Ma immagino che tu lo sapessi già.

3
void Foo() 
{ 
    // private in method scope 
    Object objectA = new Object(); 
} 

class Bar() 
{ 
    // private in class scrope 
    Object objectA = new Object(); 
} 
3

È privati ​​per impostazione predefinita.

0

La classe/tipo stesso imposterà "interno". L'oggetto che crei verrà impostato come "privato".

0

Classi e strutture sono dichiarati come interni di default!

Leggi tutto here

+0

I tipi annidati non sono ... vedi la mia risposta. –

+0

L'OP chiede informazioni sugli oggetti, non sui tipi. –

+0

@Jon Skeet, tnx per l'ottima risposta !!! – rudigrobler

2

Per i membri della classe e membri struct, comprese le classi nidificate e le strutture, private è l'impostazione predefinita.

Per le classi e le strutture interne - è il default

È possibile controllare MSDN per ulteriori approfondimenti ..

+0

ma nishma haver! eifo ata gar? ani garti be kiryat gat. –

+0

Penso che dovresti segnare la risposta di Jon Skeet come accettata. –

+0

raziti laasot masheu naim leha. ani ihaol livhor lemi latet et nekudot. Haval. lo sàrti essere israel 6 shanim, ve ze haia naim meod lepagesh po mishehu mi aaretz. –

0

La specificatore di accesso di classe è interna.

Lo specificatore di accesso di una variabile è privato.

Problemi correlati