منظورم این نیست! اگر یک فیلد (چه از نوع دسترسی protected چه private) توی کلاس A داشته باشم و بخواهم از کلاس B بهش دسترسی داشته باشم، یک راه حلش اینه که از یه property توی کلاس A استفاده کنم... ولی متاسفانه با ایجاد property، دیگه دسترسی به فیلد اون کلاس بصورت مخفیانه نیست!!! یعنی هر کلاسی میتونه اون فیلد رو از طریق property تغییر بده! ولی من میخواستم جوری باشه که فقط کلاس B بتونه به اون فیلد از کلاس A دسترسی داشته باشه. البته این کلمه دسترسی فقط یک کلاس، بی معنی نیست و توی سی شارپ وجود داره، منتهی فقط میتونم روی فیلد static عمل کنم، برای اینکه منظورم رو بهتر بیان کرده باشم به قطعه کد زیر توجه نمائید:
class A
{
private static string _name;
public B b = new B();
class B
{
public void ChangeName()
{
_name = "HELL";
}
}
}
که متد ChangeName از کلاس B باعث تغییر فیلد _name
از کلاس A میشه! برای دسترسی به متد فوق به شکل زیر استفاده میکنیم:
A a = new A();
a.b.ChangeName();
ولی متاسفانه اشکالی که در اینجا وجود داره، اینه که فیلد _name
بصورت استاتیک هست و اگه 1000 تا نمونه (instance مثل a) از این کلاس ساخته بشه، متد ChangeName تنها روی فیلد استاتیک کلاس اصلی، تغییرات رو اعمال میکنه و بقیه 1000 تا نمونه ساخته شده از کلاس، فاقد یک فیلد خصوصی مجزا خواهند بود!