PDA

View Full Version : سوال: notation پراپرتی و enum دریک کلاس



dr_csharp
یک شنبه 07 مهر 1387, 13:05 عصر
سلام
1-من یک enum شامل ماه های سال دارم و یک property برای بررسی ماه انتخاب شده نیاز دارم .چطور باید notation رو رعایت کنم ؟
2-میخوام کاربر هنگام استفاده از کلاس پارامتر ماه را بصورت enumانتخاب کنه و در پراپرتی عدد مربوط به ماه انتخابی برگردونده بشه !
به کد های زیر توجه کنید :


public enum Month
{
January = 1,
February = 2,
March = 3,
April = 4,
May = 5,
June = 6,
July = 7,
August = 8,
September = 9,
October = 10,
November = 11,
December = 12
}

public Month _Month;

private short m_Month
{
get
{
if(_Month!=null)
switch (_Month)
{
case Month.January:
m_Month = 1;
break;
case Month.February:
m_Month = 2;
break;
case Month.March:
m_Month = 3;
break;
case Month.April:
m_Month = 4;
break;
case Month.May:
m_Month = 5;
break;
case Month.June:
m_Month = 6;
break;
case Month.July:
m_Month = 7;
break;
case Month.August:
m_Month = 8;
break;
case Month.September:
m_Month = 9;
break;
case Month.October:
m_Month = 10;
break;
case Month.November:
m_Month = 11;
break;
case Month.December:
m_Month = 12;
break;
}
return m_Month;
}
}


در روش فوق درواقع کلاس از m_Month استفاده میکنه و کاربر هنگام استفاده _Month رو مقداردهی میکنه.البته error داره..گفتم حدودی روش رو بگم.
دوستان راه حل بهتری ندارن ؟

dr_csharp
یک شنبه 07 مهر 1387, 13:33 عصر
نمیدون بچه ها نظر بدین.خودم به این نتجه رسیدم :


public enum Month
{
January = 1,
February = 2,
March = 3,
April = 4,
May = 5,
June = 6,
July = 7,
August = 8,
September = 9,
October = 10,
November = 11,
December = 12
}

private Month m_Month;
public Month _Month
{
get
{
return m_Month;
}
set
{
if (value != null)
m_Month = value;
}
}

و هنگام استفاده از پراپرتی Month_ در کلاس با یه Switch مقدار مورد نظر رو استخراج میکنم !

Laser_Hadi
یک شنبه 07 مهر 1387, 14:01 عصر
دوست عزیز Property رو به صورت زیر تغییر بده :





private short m_Month = 0;
public Month SelectedMonth
{
get
{
return (Month)m_Month;
}
set
{
m_Month = (int)Enum.Parse(typeof(Month), value.ToString());
}
}




با تشکر : لیزر Laser

dr_csharp
یک شنبه 07 مهر 1387, 14:12 عصر
دوست عزیز Property رو به صورت زیر تغییر بده :





private short m_Month = 0;
public Month SelectedMonth
{
get
{
return (Month)m_Month;
}
set
{
m_Month = (int)Enum.Parse(typeof(Month), value.ToString());
}
}





با تشکر : لیزر Laser


با استفاده از کد شما هنگام استفاده ازپراپرتی SelectdMonth باید مجدد cast کنیم،فکر میکنم روش قبلی مزیت داشته باشه بدین دلیل که تنها هنگام استفاده نیاز به cast به مقدار short خواهیم داشت .
ضمنا اینکار مجازنیست :

(Month)m_Month;

Laser_Hadi
یک شنبه 07 مهر 1387, 14:19 عصر
تمامی اعمال از جمله Cast در داخل خود Property انجام میشه و دیگه لازم به این کار نیست.
مگر اینکه منظور شما از سوالتون چیز دیگه ای باشه و من درست متوجه نشده باشم.

با تشکر : لیزر Laser

dr_csharp
یک شنبه 07 مهر 1387, 14:26 عصر
تمامی اعمال از جمله Cast در داخل خود Property انجام میشه و دیگه لازم به این کار نیست.
مگر اینکه منظور شما از سوالتون چیز دیگه ای باشه و من درست متوجه نشده باشم.

با تشکر : لیزر Laser
همونطور کهمیدونید،برای استفاده از enum ما نیازمند cast اون به یک مقدار عددی میباشیم . بنابراین با این روش شما ،عملیات cast در پراپرتی هیچ دردی رو دوا نمیکنه چون نهایتا باز داره متغیری از نوع Enum برمیگردونه!مگر اینکه در برنامه ( هنگام استفاده ) از m_Month استفاده کنیم و این یعنی زیر سوال بردن propety.

Laser_Hadi
یک شنبه 07 مهر 1387, 14:46 عصر
با کمی جابه جایی نظر شما تامین میشه :


private Month m_Month = Month.January;
public short SelectedMonth
{
get
{
return (int)Enum.Parse(typeof(Month), m_Month.ToString());
}
set
{
m_Month = (Month)value;
}
}

dr_csharp
یک شنبه 07 مهر 1387, 14:50 عصر
با کمی جابه جایی نظر شما تامین میشه :


private Month m_Month = Month.January;
public short SelectedMonth
{
get
{
return (int)Enum.Parse(typeof(Month), value.ToString());
}
set
{
m_Month = (Month)m_Month;
}
}
:متعجب: رفیق اینجوری که نوع پراپرتی رو short کردین !!!؟ مثلا کاربر کلاس قراره به این پراپرتی یک enum نسبت بده و با عدد سروکله نزنه!

Laser_Hadi
یک شنبه 07 مهر 1387, 15:09 عصر
دوست عزیز من هرچی می گم شما عکسش رو می گی.

من توصیه می کنم یک بار دیگه به اول صفحه مراجعه کنی و سوال خودت رو بخونی. فکر می کنم خودت
هم یادت رفته که چی می خوای. بعد اگر بیای پائین تر می بینی که بهینه و درست همون Property طولانی که خودت نوشتی رو من برات نوشتم با یک تفاوت دیگه که مال شما Error داره ولی اونی که من
نوشتم کار میکنه. مگر اینکه اون Property رو خودت ننوشته باشی و اصلا" نمی دونی که چیکار می کنه.
به هر صورت من تلاشم رو کردم. پس اگر اینها جواب شما نیست سوالت رو واضح بگو تا با کمک دیگران عصبانی نشی.

با تشکر : لیزر Laser

dr_csharp
یک شنبه 07 مهر 1387, 15:18 عصر
دوست عزیز من هرچی می گم شما عکسش رو می گی.

من توصیه می کنم یک بار دیگه به اول صفحه مراجعه کنی و سوال خودت رو بخونی. فکر می کنم خودت
هم یادت رفته که چی می خوای. بعد اگر بیای پائین تر می بینی که بهینه و درست همون Property طولانی که خودت نوشتی رو من برات نوشتم با یک تفاوت دیگه که مال شما Error داره ولی اونی که من
نوشتم کار میکنه. مگر اینکه اون Property رو خودت ننوشته باشی و اصلا" نمی دونی که چیکار می کنه.
به هر صورت من تلاشم رو کردم. پس اگر اینها جواب شما نیست سوالت رو واضح بگو تا با کمک دیگران عصبانی نشی.

با تشکر : لیزر Laser
:لبخندساده:
راه اول که اولین فکر بود و تو توضیحاتم بیان شده بود چه وضعیتی داره !در راه دوم من به هدفم رسیدم و خواستم دوستان هم نظر و پیشنهاد ارایه کنن !
و اما اونچه من میخوام دقیقا تو پست اول مطرح شده :

2-میخوام کاربر هنگام استفاده از کلاس پارامتر ماه را بصورت enumانتخاب کنه و در پراپرتی عدد مربوط به ماه انتخابی برگردونده بشه
بازم تاکید میکنم که در روش مذکور ( پست دوم ) مسئله حل و تنها تفاوتش با صورت مسئله اینه که پراپتی enum برمیگردونه و باید هنگام استفاده cast بشه .
تا اینجای بحث از جناب لیزر بخاطر توجهشون ممنونم .

SMRAH1
دوشنبه 08 مهر 1387, 00:08 صبح
سلام

کد پیوست،قسمت از برنامه هایی است که برای افزایش تجربه خودم،می نویسم.
در بخش Enum DayOfWeek : string <> int : شاید به هدفت برسی(فرم کارهای دیگری هم می کند ولی فقط این قسمتش به منظور شما مربوط است).البته نیاز به کد زیادی نیست ولی من حوصله پالایش کد را نداشتم.

موفق باشی