Страницы

Поиск по вопросам

воскресенье, 8 декабря 2019 г.

Модификаторы доступа - public, но только для некоторых классов

#c_sharp


Модификатор доступа "public" даёт доступ к члену класса для всех других классов.
Возможно ли сделать член класса доступным только для некоторых других классов? 
Уточнения вопроса:  внутри одной сборки; следующие модификаторы доступа не подходят:
public, private, internal, protected, protected internal, private protected.
    


Ответы

Ответ 1



Возможность доступа из некоторых классов (не из всех): Члены, помеченные модификатором доступа internal - к ним имеют доступ все типы внутри данной сборки, а также типы из дружественных (см. соседний ответ) сборок. Члены, помеченные модификатором доступа protected - к ним имеют доступ все типы-наследники данного. Члены, помеченные модификатором protected internal - это объединение двух предыдущих пунктов, т.е. имеют доступ все типы из данной и дружественных сборок, а также типы-наследники из любых сборок. Члены, помеченные модификатором private protected (C# 7.2 и выше) - это пересечение первых двух пунктов, т.е. имеют доступ типы-наследники данного, но только в пределах данной сборки или дружественных. Вложенные типы имеют неограниченный доступ ко всем членам данного типа (даже к private).

Ответ 2



Можно определить дружественные сборки пометив их специальным атрибутом InternalsVisibleTo Вот пример из MSDN: using System.Runtime.CompilerServices; using System; [assembly: InternalsVisibleTo("AssemblyB")] // The class is internal by default. class FriendClass { public void Test() { Console.WriteLine("Sample Class"); } } // Public class that has an internal method. public class ClassWithFriendMethod { internal void Test() { Console.WriteLine("Sample Method"); } }

Комментариев нет:

Отправить комментарий