தனிப்பட்ட பாதுகாக்கப்பட்ட அணுகல் மாற்றியானது C# பதிப்பு 7.2 மற்றும் அதற்குப் பிறகு செல்லுபடியாகும்.
பாதுகாக்கப்பட்ட உள் மாற்றியமைப்பவர் உண்மையில் பாதுகாக்கப்பட்ட அல்லது உள் என்று பொருள், அதாவது - உறுப்பினர் X குழந்தை வகுப்புகளுக்கும் தற்போதைய சபையில் உள்ள எந்தவொரு வகுப்பிற்கும் அணுகக்கூடியது, அந்த வகுப்பு X பின் குழந்தையாக இல்லாவிட்டாலும் கூட (எனவே "பாதுகாக்கப்பட்ட" குறிக்கப்பட்ட கட்டுப்பாடு தளர்த்தப்படுகிறது).
C# பதிப்பு 7.2 மற்றும் அதற்குப் பிறகு, புதிய மாற்றியமைக்கும் தனியார் பாதுகாக்கப்பட்டவை உண்மையில் பாதுகாக்கப்பட்டவை மற்றும் அகம் என்பதையும் குறிக்கின்றன.
அதாவது - ஒரே சபையில் இருக்கும் குழந்தை வகுப்புகளுக்கு மட்டுமே உறுப்பினர் அணுக முடியும், ஆனால் சபைக்கு வெளியே இருக்கும் குழந்தை வகுப்புகளுக்கு அல்ல (எனவே "பாதுகாக்கப்பட்ட" என்பதன் மூலம் கட்டுப்படுத்தப்பட்ட கட்டுப்பாடு குறுகியது - இன்னும் கட்டுப்படுத்தப்படுகிறது).
உங்கள் சபையில் வகுப்புகளின் வரிசைமுறையை நீங்கள் உருவாக்கினால், அந்த வரிசைக்கு சில பகுதிகளை அணுக மற்ற கூட்டங்களிலிருந்து எந்த குழந்தை வகுப்புகளும் விரும்பவில்லை என்றால் அது பயனுள்ளதாக இருக்கும்.
பின்வரும் எடுத்துக்காட்டில் Assembly1.cs மற்றும் Assembly2.cs என்ற இரண்டு கோப்புகள் உள்ளன.முதல் கோப்பில் ஒரு பொது அடிப்படை வகுப்பு, MyBaseClass மற்றும் அதிலிருந்து பெறப்பட்ட ஒரு வகை, MyDerivedClass1 ஆகியவை உள்ளன.
MyBaseClass ஒரு தனியார் பாதுகாக்கப்பட்ட உறுப்பினரைக் கொண்டுள்ளது, எண்ணிக்கை, இது MyDerivedClass1 இரண்டு வழிகளில் அணுக முயற்சிக்கிறது.
MyBaseClass இன் ஒரு நிகழ்வு மூலம் எண்ணிக்கையை அணுகுவதற்கான முதல் முயற்சி பிழையை உருவாக்கும்.இருப்பினும், MyDerivedClass1 இல் மரபுரிமையாக உறுப்பினராகப் பயன்படுத்துவதற்கான முயற்சி வெற்றி பெறும்.
இரண்டாவது கோப்பில், MyDerivedClass2 இன் மரபுரிமை உறுப்பினராக எண்ணிக்கையை அணுகும் முயற்சி ஒரு பிழையை உருவாக்கும், ஏனெனில் இது Assembly1 இல் பெறப்பட்ட வகைகளால் மட்டுமே அணுக முடியும்.
உதாரணம்
// Assembly1.cs
// Compile with: /target:library
public class MyBaseClass
{
private protected int num= 0;
}
public class MyDerivedClass1 : MyBaseClass
{
void callMeOnce()
{
MyBaseClass obj = new MyBaseClass();
obj.num= 5; // Error CS1540, because the variable num can only be accessed by classes derived from MyBaseClass.
num= 5; // OK, accessed through the current derived class instance
}
}
உதாரணம்
// Assembly2.cs
// Compile with: /reference:Assembly1.dll
class MyDerivedClass2 : MyBaseClass
{
void callMeOnce()
{
num= 10; // Error CS0122, because num can only be accessed by types in Assembly1
}
}