Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Kombinace protected internal klíčových slov je modifikátor přístupu člena. Můžete získat přístup k chráněnému internímu členu z aktuálního sestavení nebo z typů odvozených z obsahující třídy. Porovnání protected internal s ostatními modifikátory přístupu najdete v tématu Úrovně přístupnosti.
Referenční dokumentace jazyka C# dokumentuje naposledy vydané verze jazyka C#. Obsahuje také počáteční dokumentaci k funkcím ve verzi Public Preview pro nadcházející jazykovou verzi.
Dokumentace identifikuje všechny funkce, které byly poprvé představeny v posledních třech verzích jazyka nebo v aktuálních verzích Public Preview.
Návod
Informace o tom, kdy byla funkce poprvé představena v jazyce C#, najdete v článku o historii verzí jazyka C#.
Jakýkoli typ v rámci obsahujícího sestavení má přístup k chráněnému internímu členu základní třídy. Odvozená třída umístěná v jiném sestavení má přístup k členu pouze v případě, že přístup probíhá prostřednictvím proměnné odvozeného typu třídy. Představte si například následující segment kódu:
// 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;
}
}
Tento příklad obsahuje dva soubory Assembly1.cs a Assembly2.cs.
První soubor obsahuje veřejnou základní třídu BaseClassa jinou třídu . TestAccess
BaseClass vlastní chráněný interní člen , myValuekterý TestAccess typ přistupuje, protože jsou ve stejném sestavení.
Ve druhém souboru se pokus o přístup myValue prostřednictvím instance BaseClass vyvolá chybu, zatímco přístup k tomuto členu prostřednictvím instance odvozené třídy bude DerivedClass úspěšný. Toto pravidlo přístupu ukazuje, že protected internal umožňuje přístup z libovolné třídy ve stejném sestavení nebo odvozené třídy v libovolném sestavení, což z něj činí nejvíce permisivní modifikátory chráněného přístupu.
Členy struktury nemohou být protected internal , protože struktura nemůže být zděděna.
Přepsání chráněných interních členů
Když přepíšete virtuální člen, modifikátor usnadnění přepsání metody závisí na sestavení, kde definujete odvozenou třídu.
Když definujete odvozenou třídu ve stejném sestavení jako základní třída, mají všichni protected internal přepsání členové přístup. Pokud definujete odvozenou třídu v jiném sestavení než základní třída, mají přepsání členové protected přístup.
// 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;
}
}
Specifikace jazyka C#
Další informace najdete ve specifikaci jazyka C#. Specifikace jazyka je konečným zdrojem syntaxe a použití jazyka C#.