Modificatori di accesso interni e privati


Risposte:


516

internal è per scope assembly (cioè accessibile solo dal codice nello stesso .exe o .dll)

private è per ambito di classe (cioè accessibile solo da codice nella stessa classe).


6
ho una domanda veloce; se dichiaro una classe privata in uno spazio dei nomi all'interno di un assembly rispetto alla classe interna, posso accedere a quella classe all'interno dell'assembly in entrambi i casi, allora qual è la differenza tra una classe privata e una classe interna? o vengono usati modificatori privati ​​e interni in termini di classi quando si annidano le classi all'interno della classe?
mayotic

2
ho aggiunto il progetto / assembly specifico come riferimento di un altro progetto e sia privato che interno mi impediscono di accedere a questa particolare classe all'interno dello spazio dei nomi, quindi di nuovo ... la differenza tra le classi private e interne è? grazie
mayotic l'

9
Non è possibile dichiarare privata una classe di livello superiore. Il compilatore ti fermerà.
TheGateKeeper il

6
@NetSkay: se si dichiara una classe privata all'interno di una classe pubblica, questa classe non è accessibile da altre classi nell'assembly ma se si dichiara questa classe come interna, allora sarebbe accessibile nell'assembly. Tuttavia, entrambi non saranno accessibili all'esterno dell'assemblaggio.
Yogesh Jindal,

2
Se provieni da uno sfondo VB.NET, la parola chiave "interna" di C # equivale alla parola chiave "Amico" di VB.NET.
Brain2000,

207

Trova una spiegazione di seguito. Puoi controllare questo link per maggiori dettagli - http://www.dotnetbull.com/2013/10/public-protected-private-internal-access-modifier-in-c.html

Privato: - I membri privati ​​sono accessibili solo all'interno del proprio tipo (Classe propria).

Interno: - I membri interni sono accessibili solo all'interno dell'assembly per eredità (il suo tipo derivato) o per istanza di classe.

inserisci qui la descrizione dell'immagine

Riferimento:

dotnetbull - cos'è il modificatore di accesso in c #


17
Interessante che Protected Internaloffre un accesso più ampio rispetto a Protected.
Dan Bechard,

9
@Dan, sono pienamente d'accordo. Potrebbe essere utile leggere e pensare a protected internalcome protected OR internal.
chessofnerd,

7
Cosa With Typesignifica?
James Wierzba,

@ Dan, ho pensato che avrebbe funzionato solo come una tabella di verità e ANDquella matrice su true | false | false | false protected internal. non intuitivo. invece è vero | vero | vero | falso come se OR'd.
ferr

1
Per inciso, C # 7.2 ha appena aggiunto un modificatore "protetto E interno", anche se le parole chiave scelte, private protectednon sono molto intuitive. Per dettagli: docs.microsoft.com/en-us/dotnet/csharp/language-reference/…
Joe Sewell

70

internali membri sono visibili a tutto il codice nell'assembly in cui sono dichiarati.
(E agli altri assembly a cui si fa riferimento usando l' [InternalsVisibleTo]attributo )

privatei membri sono visibili solo alla classe dichiarante. (comprese le classi nidificate)

Una classe esterna (non nidificata) non può essere dichiarata private, in quanto non esiste un ambito di contenimento a cui renderla privata.

Per rispondere alla domanda che hai dimenticato di porre, i protectedmembri sono come privatemembri, ma sono anche visibili in tutte le classi che ereditano il tipo dichiarante. (Ma solo su un'espressione almeno del tipo della classe corrente)


8

privato - incapsulamenti in classe / ambito / struttura ect ".

interno - incapsulamento negli assiemi.


6

I membri privati sono accessibili solo all'interno del corpo della classe o della struttura in cui sono dichiarati.

I tipi o membri interni sono accessibili solo all'interno dei file nello stesso assembly


quindi qual è la differenza nell'usarlo? ancora non capisco: X
deadfish

4
I privati ​​sono accessibili solo dall'interno della classe, gli interni sono accessibili dall'interno dell'Assemblea (progetto in VS cioè file dll / exe).
Jesper Fyhr Knudsen,

3

Internal ti consentirà di fare riferimento, per esempio, a una classe statica di accesso ai dati (per la sicurezza dei thread) tra più classi di logica aziendale, senza sottoscriverle per ereditare quella classe / inciampare l'una sull'altra nei pool di connessioni e, in definitiva, evitare di consentire una classe DAL promuovere l'accesso a livello pubblico. Questo ha innumerevoli basi nel design e nelle migliori pratiche.

Entity Framework fa buon uso di questo tipo di accesso


0

i membri interni sono accessibili all'interno dell'assemblea (accessibile solo nello stesso progetto)

i membri privati ​​sono accessibili all'interno della stessa classe

Esempio per principianti

Ci sono 2 progetti in una soluzione (Progetto1, Progetto2) e Progetto1 ha un riferimento a Progetto2.

  • Il metodo pubblico scritto in Project2 sarà accessibile in Project2 e Project1
  • Il metodo interno scritto in Project2 sarà accessibile solo in Project2 ma non in Project1
  • il metodo privato scritto in class1 di Project2 sarà accessibile solo alla stessa classe. Non sarà accessibile in altre classi del Progetto 2 non nel Progetto 1.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.