PDA

View Full Version : سوال: dynamic cast in runtime



memolove2
سه شنبه 28 دی 1389, 12:20 عصر
دوستان عزیز در کد زیر در خط 3 برنامه دارای خطا میباشد

1- object obj = new form1
2- type t=obj.gettype()
3- string formname = ((t)obj).name


چه راه حلی پیشنهاد میکنید ؟
حتما هم میخوام t را بصورت داینامیک بگیرم چون اسم فرمهارو نمیخوام یکی یکی بدم

rezatati
چهارشنبه 29 دی 1389, 21:51 عصر
میشه بیشتر توضیح بدی اصلا میخواهی چیکار کنی میشه کل برنامه را آپلود کنی

memolove2
پنج شنبه 30 دی 1389, 09:39 صبح
ببینید فکر کنید 2تا فرم داریم که مثلا در فرم 1 یه property تعریف کردیم به صورت زیر


public bool ready
{
get { return mbPiReady; }
}


حالا در Form2 میخوایم این propertio استفاده کنیم که معمولا از این روش استفاده میشه


From frm;
((form1)frm).ready


اما من نمیخوام form1 را بصورت استاتیک یا دستی پشت frm برای cast کردن قرار بدم
به علت اینکه تعداد فرم ها زیاده و همه دارای property ready هستند میخوام که داینامیک کار انجام بشه

یعنی تقریبا یه چیزی شبیه کد زیر بشه


Form1 frm = new form1;
((typeof(frm)frm).ready

mohsen_csharp
پنج شنبه 30 دی 1389, 23:34 عصر
شما برای این کار از اینترفیس استفاده کنی خیلی بهتره
اول بیا یه اینترفیس مثلا به نام IForm تعریف کن
تو این اینترفیس متدها و خصوصیات مورد نظرت رو تعریف کن
سپس همه فرم هاتو ازش ارث بری کن
هنگام cast کردن هم کافیه که فرم مورد نظر رو به همون IForm کست کنی و از خصوصیتش استفاده کنی
البته روش های دیگه استفاده از Generic یا Reflection هست

memolove2
یک شنبه 03 بهمن 1389, 11:30 صبح
ممنون از دوستایی که راهنمایی کردن من تونستم راه حلی پیدا کنم برای اینکار
اینجا میزارم که اگه کسی برخورد به این مشکل بتونه استفاده کنه


Type t = form.GetType();
object obj = form;
PropertyInfo props = t.GetProperty(نام پروپرتی);
object Gobj = props.GetValue(obj, null);

برای set کردن هم از دستورات زیر استفاده کنید


Type t = form.GetType();
object obj = form;

PropertyInfo props = t.GetProperty(نام پروپرتی);

props.SetValue(obj, Value, null);