#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"); } }
Комментариев нет:
Отправить комментарий