2009-01-15 9 views
13

Was ist ein "Freund" Schlüsselwort in C Sharp?Was ist ein "Freund" Schlüsselwort in C Sharp?

Wie verwende ich das Schlüsselwort 'internal'?

Ich habe gelesen, dass 'interne' Schlüsselwort ein Ersatz für 'Freund' in C# ist.

Ich verwende eine DLL in meinem C# -Projekt, für das ich den Quellcode habe, und ich möchte den vorhandenen Code nicht ändern. Ich habe die Klasse geerbt und kann meine geerbte Klasse beliebig verwenden. Das Problem besteht darin, dass der Großteil des Codes in der übergeordneten Klasse über geschützte Methoden verfügt. Wird die Verwendung eines Freundes es irgendwie ermöglichen, auf diese geschützten Methoden zuzugreifen oder sie aufzurufen?

+5

Bitte klären Sie diese Frage, da sowohl VB als auch C Friend-Schlüsselwörter haben. Es gibt kein Äquivalent des C-Friend-Schlüsselworts in C# –

Antwort

27
  1. können Sie den Modifikator Stichwort Zugang verwenden internal nur einen Typ oder Typ Element als zugänglich Code in derselben Anordnung zu erklären.

  2. Sie können die Klasse InternalsVisibleToAttribute, die in System.Rutime.CompilerServices definiert ist, verwenden, um einen Typ als für Code zugänglich in derselben Baugruppe oder einer bestimmten Baugruppe zu deklarieren.

Sie verwenden die erste wie jede andere access modifier wie private verwenden. Nämlich:

internal class MyClass { 
    ... 
} 

Sie verwenden die zweite wie folgt:

[assembly:InternalsVisibleTo("MyFriendAssembly", PublicKey="...")] 
internal class MyVisibleClass { 
    ... 
} 

Beide Recht entspricht friend in C# in Betracht gezogen werden kann.

Methoden, die protected sind, sind bereits für abgeleitete Klassen verfügbar.

5

1) Internal ist der C# equivelant des Stichwortes VB.NET 'Freund', wie sie (im Gegensatz zu einem Ersatz erraten)

2) Die Verwendung ist als

internal void Function() {} 
internal Class Classname() {} 
internal int myInt; 
internal int MyProperty { get; set; } 

3 folgt) Es handelt sich im Grunde genommen um einen Zugriffsmodifizierer, der festlegt, dass die Zugänglichkeit der als intern markierten Klasse/function/vairiable/property so aussieht, als wäre sie öffentlich für die Assembly, in der sie kompiliert wurde, und privat für alle anderen Assemblies

1

Intern ist das Äquiv Freund von Freund. Eine geschützte Methode ist nur innerhalb derselben Klasse oder von einem Vererber verfügbar. Wenn Sie geschützte Methoden von einem Vererber anzeigen möchten, können Sie sie in öffentliche Methoden einschließen.

1

Ihre Unterklasse kann auf die geschützten Mitglieder der Klasse zugreifen, die Sie erben.

Möchten Sie diesen geschützten Mitgliedern Zugriff auf eine andere Klasse gewähren?

24

Nein, „intern“ ist nicht dasselbe wie „Freund“ (zumindest die C++ ‚Freund‘)

Freund gibt an, dass diese Klasse von ONE, bestimmten Klasse nur zugänglich ist.
intern gibt an, dass auf diese Klasse von jeder Klasse in der Assembly zugegriffen werden kann.

+0

Es ist nicht äquivalent, aber es * ist * der Mechanismus, mit dem eine Gruppe von Klassen zusammenarbeitet, ohne sich dem Rest der Welt auszusetzen. Es fördert auch kleinere Module und reduziert Spaghetti-Beziehungen zwischen den Klassen. –