Junior
Kokie yra prieigos modifikatoriai C#?
sobes.tech AI
Atsakymas iš AI
C# kalboje yra šie prieigos modifikatoriai:
- public: Prieiga nėra ribojama.
publicpažymėti nariai yra prieinami iš bet kurios vietos, kur yra prieinamas jų turintis tipas. - private: Prieiga yra ribojama jų turinčio tipo.
privatepažymėti nariai yra prieinami tik iš kodo to paties klases ar struktūros viduje. - protected: Prieiga yra ribojama arba turinčio tipo, arba jo paveldimų tipų.
protectedpažymėti nariai yra prieinami savo klasės ir paveldimų klasių viduje. - internal: Prieiga yra ribojama dabartiniam surinkimui (.dll arba .exe).
internalpažymėti nariai yra prieinami iš bet kurios vietos to paties surinkimo viduje. - protected internal: Prieiga yra ribojama dabartiniam surinkimui arba tipams, paveldėjusiems iš turinčio tipo, kitose surinkimuose. Tai yra
protectedirinternalderinys. - private protected: Prieiga yra ribojama turinčiam tipui arba jo paveldėjimo tipams tik toje pačioje surinkimoje. Tai yra
privateirprotectedderinys.
// Pavyzdys naudojant prieigos modifikatorius
public class MyClass
{
public int PublicField; // Prieinama iš bet kurios vietos
private int PrivateField; // Prieinama tik MyClass viduje
protected int ProtectedField; // Prieinama MyClass ir paveldėjimo klasėse
internal int InternalField; // Prieinama dabartiniame surinkime
protected internal int ProtectedInternalField; // Prieinama dabartiniame surinkime ARBA paveldėjimo klasėse
private protected int PrivateProtectedField; // Prieinama tik MyClass ir paveldėjimo klasėse toje pačioje surinkimoje
void MyMethod()
{
PrivateField = 10; // Gerai
}
}
public class DerivedClass : MyClass
{
void DerivedMethod()
{
ProtectedField = 20; // Gerai
// PrivateField = 30; // Klaida - privačios lauko negalima pasiekti paveldėtojoje klasėje
ProtectedInternalField = 40; // Gerai
PrivateProtectedField = 50; // Gerai
}
}
public class AnotherClassInSameAssembly
{
void AnotherMethod()
{
MyClass mc = new MyClass();
mc.PublicField = 1; // Gerai
mc.InternalField = 2; // Gerai
mc.ProtectedInternalField = 3; // Gerai
// mc.PrivateField = 4; // Klaida
// mc.ProtectedField = 5; // Klaida
// mc.PrivateProtectedField = 6; // Klaida
}
}