2009-01-15 10 views
13

Quel est l'équivalent d'un mot-clé «ami» dans C Sharp?Quel est l'équivalent d'un mot-clé «ami» dans C Sharp?

Comment utiliser le mot-clé 'internal'?

J'ai lu que le mot-clé 'internal' est un remplacement de 'friend' en C#.

J'utilise une DLL dans mon projet C# dont j'ai le code source et pourtant je ne veux pas modifier le code existant. J'ai hérité de la classe et je peux utiliser ma classe héritée comme je le souhaite. Le problème est que la plupart du code dans la classe parente a des méthodes protégées. L'utilisation d'un ami permettra-t-elle d'accéder ou d'appeler ces méthodes protégées?

+5

Veuillez clarifier cette question, car VB et C ont des mots-clés amis. Il n'y a pas d'équivalent du mot-clé C friend dans C# –

Répondre

27
  1. Vous pouvez utiliser le modificateur d'accès de mot-clé internal de déclarer un type ou un membre de type comme accessible à code dans le même ensemble que.

  2. Vous pouvez utiliser la classe InternalsVisibleToAttribute définie dans System.Rutime.CompilerServices pour déclarer un type accessible au code dans le même assembly ou un assembly spécifié uniquement.

Vous utilisez la première que vous utilisez un autre access modifier tels que private. A savoir:

internal class MyClass { 
    ... 
} 

Vous utilisez la seconde comme suit:

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

deux peuvent à juste titre être considéré comme l'équivalent de friend en C#. Les méthodes protected sont déjà disponibles pour les classes dérivées.

5

1) Internal est le C# equivelant de 'ami' mot-clé le VB.NET, comme vous l'avez deviné (par opposition à un remplacement)

2) L'utilisation est comme suit

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

3) Il est, fondamentalement, un modificateur d'accès qui stipule que l'accessibilité de la classe/fonction/vairiable/propriété marquée comme interne est comme si elle était publique à l'Assemblée dans laquelle elle est compilée, et privée à toute autre assemblée

1

Interne est l'équiv alent d'ami. Une méthode protégée est uniquement disponible dans la même classe ou à partir d'un héritier. Si vous essayez d'exposer des méthodes protégées à partir d'un héritier, vous pouvez les placer dans des méthodes publiques.

1

Votre sous-classe sera en mesure d'accéder aux membres protégés de la classe dont vous héritez.

Cherchez-vous à donner accès à ces membres protégés à une autre classe?

24

Non, « interne » n'est pas la même chose que « ami » (au moins le « ami » C++)

ami précise que cette classe est accessible uniquement par l'ONE, classe particulière.
internal spécifie que cette classe est accessible par N'IMPORTE QUELLE classe dans l'assembly.

+0

Ce n'est pas équivalent, mais c'est * le * mécanisme par lequel un ensemble de classes travaille ensemble sans s'exposer au reste du monde. Il encourage également les modules plus petits et réduit les relations «spaghetti» entre les classes. –

Questions connexes