PDA

View Full Version : حرفه ای: لينك كردن يك شي



youngold
سه شنبه 07 آذر 1391, 22:56 عصر
چطور ميشه يك شي رو از يك فيلد لينك كرد به فيلد ديگه؟

programerinfonet
سه شنبه 07 آذر 1391, 23:25 عصر
یعنی چی دوست عزیز
میشه سوالتون رو واضح تر توضیح بدین ؟

farghabil
سه شنبه 07 آذر 1391, 23:25 عصر
میشه بیشتذ توضیح بدی؟

youngold
سه شنبه 07 آذر 1391, 23:34 عصر
یعنی چی دوست عزیز
میشه سوالتون رو واضح تر توضیح بدین ؟


براي مثال يك object رو به صورت static داريم حالا ميخوايم اون رو از طريق يك تابع به فيلد درون كلاسمون لينك كنيم، يعني هر وقت از درون كلاس فيلد لينك شده فراخواني شد همان شي static فراخواني بشه.


public static bool isBusy = false;
myCls cls = new myCls(isBusy);

public class myCls
{
public myCls(bool param1)
{
this.isBusy = param1;
}
public bool isBusy;
}



در مثال بالا اينكار انجام ميشه اما ما نميخوايم مقدار به عنوان يك مقدار جديد در فيلد كلاس پر بشه ميخوايم همون رو لينك كنه.

ديگه تا حد ممكن ساده گفتم!

plus
سه شنبه 07 آذر 1391, 23:51 عصر
راه استفاده از Property بجای field مد نظر شما نیست؟


public static bool isBusy = false;
myCls cls = new myCls();

public class myCls
{
public myCls()
{

}
public bool IsBusy
{
get { return isBusy; }
set { isBusy = value; }
}
}

Mahmoud.Afrad
سه شنبه 07 آذر 1391, 23:54 عصر
یعنی چه لینک کنه؟ یعنی میخوای اون متغیر استاتیک رو از داخل کلاس تغییر بدی؟ اگر آره به این صورت میتونی:
public static bool isBusy = false;
myCls cls = new myCls(ref isBusy);


public class myCls
{
public myCls(ref bool param1)
{
//change param1 by ref
param1 = true;
}
}

youngold
سه شنبه 07 آذر 1391, 23:58 عصر
یعنی چه لینک کنه؟ یعنی میخوای داخل اون متغیر استاتیک رو از داخل کلاس تغییر بدی؟ اگر آره به این صورت میتونی:
public static bool isBusy = false;
myCls cls = new myCls(ref isBusy);


public class myCls
{
public myCls(ref bool param1)
{
//change param1 by ref
param1 = true;
}
}

نه دوست عزيز دقت نكردين، به ref و out و ارسال پارامتر آگاهم
ميخوايم اون فيلد در كلاس رو به عنوان نماينده اون فيلد static كه در بيرون كلاس هست ، قرار بديم كه بعد در متد هاي كلاس مورد استفاده قرار بگيره

youngold
چهارشنبه 08 آذر 1391, 00:01 صبح
راه استفاده از Property بجای field مد نظر شما نیست؟


public static bool isBusy = false;
myCls cls = new myCls();

public class myCls
{
public myCls()
{

}
public bool IsBusy
{
get { return isBusy; }
set { isBusy = value; }
}
}


خير ، چند فيلد static داريم كه به هر كلاس فيلد static مختص خودش واگذار ميشه.

youngold
چهارشنبه 08 آذر 1391, 00:33 صبح
مقصودت از این کار چی هست؟

مقصود؟! با توجه به توضيحات فقط يك مقصود باقي ميمونه. هر كلاس از درون خودش به فيلدي كه بهش به نمايندگي داده شده دسترسي داشته باشه.

plus
چهارشنبه 08 آذر 1391, 00:36 صبح
خير ، چند فيلد static داريم كه به هر كلاس فيلد static مختص خودش واگذار ميشه.
خوب حداقل دو راه داره.
از اونجا که نوع boolean ، از نوع ReferenceType نیست و مقدارش انتقال داده میشه نه Referenceش، شما میتونی یک کلاس که یک مقدار Boolean رو نگه میداره رو بجای خود bool استفاده کنی تا Referenceش نگه داشته بشه:


public static Bool isBusy = new Bool(false);
public Form1()
{
InitializeComponent();
myCls cls = new myCls(isBusy);

MessageBox.Show(string.Format("myCls.IsBusy:{0}", cls.IsBusy));

isBusy.Value = true;
MessageBox.Show(string.Format("myCls.IsBusy:{0}", cls.IsBusy));
}

public class Bool
{
private bool value;

public Bool(bool value)
{
this.value = value;
}

public bool Value
{
get { return value; }
set { this.value = value; }
}

public override string ToString()
{
return value.ToString();
}
}
public class myCls
{
public myCls(Bool IsBusy)
{
this.IsBusy = IsBusy;
}
public Bool IsBusy;
}

راه دوم استفاده از Reflection هست یعنی نام و نام کلاس در بر دارنده متغیر static رو برای MyCls بفرسی و اونجا با استفاده از Reflection به مقدار متغیر Static دسترسی پیدا کنه.
البته مطمئنن مقصودت ازین کار هرچی هست، به احتما خیلی زیاد روش کارت اشتباه هست که یه همچین نیازی رو داری.

Mahmoud.Afrad
چهارشنبه 08 آذر 1391, 00:42 صبح
اگر میخوای متغیر خارجی رو بخونی که به صورت پارامتر بوسیله سازنده میتونی ، که البته خودت نوشتی. اگر هم میخوای از داخل این کلاس متغیر خارجی رو تغییر بدی که کدی که من گذاشتم همین کار رو میکنه.
ولی به نظرم اگر نیاز به کلاس مجزا و ساختن شئ از روی اون داری بایستی یک پراپرتی درون این کلاس بسازی و بهش مقدار بدی. یعنی به جای اینکه متغیر خارج از این کلاس باشه اونو ببری توی کلاس و هر جا نیاز داشتی نمونه ازش بسازی و اون متغیر رو مقدار بدی و متغیرهای استاتیک رو هم حذف کنی.

البته منظورم از مقصود بیشتر اینه که کدو واسه چه کاری مینویسی؟