PDA

View Full Version : دسترسی به متغیر در کلاس های داخلی Nested Class



mfaridi
شنبه 08 تیر 1392, 19:56 عصر
سلام
چطور میتونم یه متغیر معرفی کنم که تو کل کلاسم باشه و همه زیر کلاس های اون بتونن استفاده کنن نمیخوام از static استفاده کنم شما راهی بلدید؟
class Class1
{

class class2
{

}
}

keyvan_s89
شنبه 08 تیر 1392, 20:00 عصر
public int a;
هر متقیری رو که public بگیری میتونی تویه بدنه کلاس هم ازش استفاده کنی.

mfaridi
شنبه 08 تیر 1392, 20:02 عصر
من تو بدنه کلاس1 همین کار رو میکنم ولی توی کلاس 2 این متغیر نیست این راه رو قبلا تست کردم نشد

uthman
شنبه 08 تیر 1392, 20:06 عصر
سلام
برای دسترسی به فیلدی که داخل کلاس دیگری است به روش زیر عمل کن
نام متغییر.نام کلاس2.نام کلاس1

class car{
class radio
{
public int volum;
}
}
car1radio.volum

mfaridi
شنبه 08 تیر 1392, 20:19 عصر
این کد اخری ضاهرا درست نیست

uthman
شنبه 08 تیر 1392, 20:52 عصر
public class one
{
public one()
{
}

public string x;
public class two:one{
one nn = new one();

public two()
{

nn.x = "vale";
}




}
}

mfaridi
چهارشنبه 30 مرداد 1392, 18:14 عصر
ممنون از اقای othmanولی راه بهتری نیست؟

amir200h
چهارشنبه 30 مرداد 1392, 18:40 عصر
برای اینکه متغیرهای کلاس 1 رو بتونی تو کلاس 2 استفاده کنی باید از کلاس 1 در کلاس 2 مشتق بگیری

Mahmoud.Afrad
چهارشنبه 30 مرداد 1392, 18:54 عصر
مسئله با ارسال ارجاع حل میشه و هیچ نیازی به ارث بری و تغییر سطح دسترسی نیست.

توی کلاس داخلی یک ارجاع به کلاس خارجی ایجاد کنید و در سازنده توسط پارامتر ورودی ، اونو ست کنید.

داخل کلاس خارجی ، هر جا از کلاس داخلی شئ جدید new کردی ، this را ارسال کنید.

class MyClass
{
private int a;

public void GetObjField()
{
NestedClass n = new NestedClass(this);
n.ShowMsg();
}



class NestedClass
{
private MyClass obj = null;

internal NestedClass(MyClass m)
{
obj = m;
}

internal void ShowMsg()
{
MessageBox.Show(obj.a.ToString());
}
}
}

همونطور که می بینید a از obj قابل دسترس هست چون obj همان شئ از کلاش خارجی است.