Frage intern vs öffentlich in c #


Ich möchte den Unterschied zwischen den public und internal Sichtbarkeitsmodifikatoren

Wann sollten wir verwenden? internal auf einer Klasse und wann public? Ich bin verwirrt, wenn eine Methode sein sollte public oder internal.

Ich habe das gelesen internal kann während der Versammlung zugegriffen werden, während public kann auch durch die Montage verwendet werden, wo der Unterschied liegt.


76
2017-11-15 06:43


Ursprung


Antworten:


public ist von überall sichtbar.

internal ist nur innerhalb einer Baugruppe sichtbar

Sie neigen dazu, interne nur zum Schutz interner APIs zu verwenden. Beispielsweise könnten Sie mehrere Überladungen einer Methode verfügbar machen:

public int Add(int x, int y)
public int Add(int x,int y, int z)

Beide rufen die interne Methode auf

internal int Add(int[] numbers)

Sie können dann einer Methode eine Menge Raffinesse zuweisen, sie jedoch mit Fassadenmethoden "schützen", die dem Programmierer helfen können, die Methode korrekt aufzurufen. (Die Implementierungsmethode mit dem Array-Parameter kann z. B. eine beliebige Anzahl von Werten haben.)

Beachten Sie auch, dass mit Reflection alle Methoden unabhängig von ihrer Sichtbarkeit aufgerufen werden können. Ein weiterer "Hack" zur Kontrolle / Zugang zu intern versteckten APIs.


89
2017-11-15 06:47



internal ist nützlich, wenn Sie ein Mitglied oder einen Typ innerhalb einer DLL deklarieren wollen, nicht außerhalb ...
normalerweise, wenn Sie ein Mitglied als deklarieren Public Sie können darauf von anderen DLLs zugreifen. Wenn Sie jedoch etwas nur innerhalb Ihrer Klassenbibliothek als öffentlich deklarieren möchten, können Sie es als deklarieren Internal.
in formeller Verteidigung: interne Mitglieder sind nur innerhalb der aktuellen Versammlung sichtbar ...


26
2017-11-15 06:47



internal ist auch nützlich beim Schreiben von Komponententests. Das InternalsVisibleTo Attribut Lassen Sie Ihre Testbaugruppe auf interne Methoden in Ihrer Codeassembly zugreifen. I.e. Sie können Methoden testen, die der Außenwelt als privat erscheinen, ohne eine Reflexion zu verwenden.


9
2017-11-15 07:19



Auf die Öffentlichkeit kann auch außerhalb der Baugruppe zugegriffen werden. Wenn Sie also auf eine Klasse zugreifen, auf die nicht zugegriffen werden soll, sollte jede Klasse in der Assembly darauf zugreifen können. Dann ist intern das Richtige. Wenn Sie Zugriff von außen benötigen, verwenden Sie public.


5
2017-11-15 06:47



Eigenschaften, die als markiert sind internal wirf ein BindingExpression path error wenn für DataBinding in WPF verwendet. Das müssen also sein public um auch dann ordnungsgemäß zu arbeiten, wenn die DataBinding innerhalb derselben Baugruppe stattfindet.


0
2018-01-03 13:57



Wenn Sie von außerhalb auf die Assembly verweisen können, haben Sie den Umfang der internen und öffentlichen Klassen


-2
2018-06-23 10:36