Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Сочетание protected internal ключевых слов — это модификатор доступа к члену. Вы можете получить доступ к защищенному внутреннему члену из текущей сборки или из типов, производных от содержащего класса. Сравнение protected internal с другими модификаторами доступа см. в разделе "Уровни специальных возможностей".
Справочные документы по языку C# описывают последнюю выпущенную версию языка C#. Она также содержит начальную документацию по функциям в общедоступных предварительных версиях для предстоящего языкового выпуска.
Документация определяет любую функцию, впервые представленную в последних трех версиях языка или в текущих общедоступных предварительных версиях.
Подсказка
Чтобы узнать, когда функция впервые появилась в C#, ознакомьтесь со статьей об истории версий языка C#.
Любой тип в содержащей сборке может получить доступ к защищенному внутреннему элементу базового класса. Производный класс, расположенный в другой сборке, может получить доступ к члену только в том случае, если доступ происходит с помощью переменной производного типа класса. Например, рассмотрим следующий сегмент кода:
// Assembly1.cs
// Compile with: /target:library
public class BaseClass
{
protected internal int myValue = 0;
}
class TestAccess
{
void Access()
{
var baseObject = new BaseClass();
baseObject.myValue = 5;
}
}
// Assembly2.cs
// Compile with: /reference:Assembly1.dll
class DerivedClass : BaseClass
{
static void Main()
{
var baseObject = new BaseClass();
var derivedObject = new DerivedClass();
// Error CS1540, because myValue can only be accessed by
// classes derived from BaseClass.
// baseObject.myValue = 10;
// OK, because this class derives from BaseClass.
derivedObject.myValue = 10;
}
}
В этом примере содержатся два файла: Assembly1.cs и Assembly2.cs.
Первый файл содержит открытый базовый класс и BaseClassдругой класс TestAccess.
BaseClassвладеет защищенным внутренним элементом, к которому TestAccess обращается тип, myValueтак как он входит в ту же сборку.
Во втором файле попытка доступа myValue через экземпляр BaseClass создает ошибку, а доступ к этому члену через экземпляр производного класса DerivedClass завершается успешно. Это правило доступа показывает, что protected internal разрешает доступ к любому классу в одной сборке или производным классам в любой сборке, что делает его наиболее всеразрешительным для модификаторов защищенного доступа.
Элементы структуры не могут быть protected internal , так как структуру нельзя наследовать.
Переопределение защищенных внутренних элементов
При переопределении виртуального элемента модификатор специальных возможностей переопределенного метода зависит от сборки, в которой определяется производный класс.
При определении производного класса в той же сборке, что и базовый класс, все переопределенные члены имеют protected internal доступ. Если вы определяете производный класс в другой сборке базового класса, переопределенные члены имеют protected доступ.
// Assembly1.cs
// Compile with: /target:library
public class BaseClass
{
protected internal virtual int GetExampleValue()
{
return 5;
}
}
public class DerivedClassSameAssembly : BaseClass
{
// Override to return a different example value, accessibility modifiers remain the same.
protected internal override int GetExampleValue()
{
return 9;
}
}
// Assembly2.cs
// Compile with: /reference:Assembly1.dll
class DerivedClassDifferentAssembly : BaseClass
{
// Override to return a different example value, since this override
// method is defined in another assembly, the accessibility modifiers
// are only protected, instead of protected internal.
protected override int GetExampleValue()
{
return 2;
}
}
Спецификация языка C#
Дополнительные сведения см. в спецификации языка C#. Спецификация языка является авторитетным источником синтаксиса и использования языка C#.