PDA

View Full Version : حرفه ای: از تابع استفاده کنم یا کلاس یا...؟



niloofar21
چهارشنبه 16 فروردین 1391, 15:59 عصر
سلام.
اول یه توضیح مختصر بدهم .من میخوام سه تا String را که بر اساس یه شرط متفاوتند در یک جایی تعریف کنم و در همه صفحات برنامه ام ازشون استفاده کنم .


به طور دقیقتر توی برنامه ام دو نوع کاربر دارم که یکی اجازه داره اطلاعات همه شهرها را ببینه و یکی فقط اطلاعات شهر خودش را .که اولی اجازه داره نام شهر را از یک dropdown list انتخاب کنه و برای دومی نام شهر از طریق session دریافت میشه .این چیزیه که من توی همه صفحات و در همه متدهای insert , update باهاش کار دارم.

کار با توابع و کلاس ها را خیلی بلد نیستم و نمی دونم از چی باید استفاده کنم. چون اطلاعات شهر در اینجا شامل سه آیتم است استفاده از تابعی که بتونه سه تا خروجی برگردونه چندان منطقی نیست. نمیدونم باید چطوری این کارو بکنم که مجبور نشم تو هر صفحه ای چند بار نوع کاربری را چک کنم و براش شرط بذارم .

این کد یه مقداری از اون چیزیه که احتمالا باید بنویسم .اما تحت چه عنوان و چطوری نمیدونم



string UserType = ds.tUsers.Rows[0][ds.tUsers.fUserTypeColumn].ToString();
{
if (UserType == "UserType1")
{
string City=ddlCity.SelectedValue.ToString();
string Shahrestan=ddlShahrestan.SelectedValue.ToString();
string Ostan=ddlOstan.SelectedValue.ToString();
}
else
{
string city= Session["CityCode"].ToString();
string Shahrestan= Session["ShahrestanCode"].ToString();
string Ostan= Session["OstanCode"].ToString();
}
return City, Shahrestan, Ostan;
}


در واقع میخوام بعد از تعریف اینها بدون نیاز به چک کردن نوع کاربر بتونم در توابع و متد های دیگه از string های بدست اومده از این قسمت استفاده کنم .

ممنون میشم راهنماییم کنید

adineh67
چهارشنبه 16 فروردین 1391, 21:32 عصر
سلام
نیلوفر جان واسه اینکار بهتر هست که از کلاس استفاده کنی و هر جا که لازم بود تابع درون کلاستو فراخوانی کنی
حالا اینکه کاربر لاگین کرده یا نه رو اینطوری چک کن :
فرض کن موقع لاگین اومدی مشخصات کاربر رو به یه کوکی یا سشن نسبت دادی حالا تو این تابع بیا مقدار این کوکی یا سشن رو بخون اگه تهی بود این دستورات اجرا بشه و اگه مخالف تهی بود دستورات مدنظر دیگه اجرا بشن

موفق باشی:لبخندساده:

niloofar21
چهارشنبه 16 فروردین 1391, 23:20 عصر
سلام .آدینه جان مسیله من اینه که میخوام سه تا خروجی بگیرم از این تابعی که میگی.در حالت معمول این برای تابع امکان پذیر نیست که سه تا خروجی بده .حالا یعنی این تابعو بذارم تو کلاس امکانش هست درست بشه ؟!
اگه یه نمونه کد برام بذارین که چطوری میتونم این کارو بکنم ممنون میشم

C#.net
پنج شنبه 17 فروردین 1391, 00:13 صبح
در حالت معمول این برای تابع امکان پذیر نیست که سه تا خروجی بده .حالا یعنی این تابعو بذارم تو کلاس امکانش هست درست بشه ؟!
اگه یه نمونه کد برام بذارین که چطوری میتونم این کارو بکنم ممنون میشم
شما اول باید یه کلاس مثل این تعریف کنید:


public class CityInfo
{
public string City { get; set; }
public string Shahrestan { get; set; }
public string Ostan { get; set; }
}


خروجی متد شما از جنس این کلاس هست، یعنی:

public CityInfo MyMethod()
{
// return value
CityInfo retVal = new CityInfo();

string UserType = ds.tUsers.Rows[0][ds.tUsers.fUserTypeColumn].ToString();
if (UserType == "UserType1")
{
retVal.City=ddlCity.SelectedValue.ToString();
retVal.Shahrestan=ddlShahrestan.SelectedValue.ToSt ring();
retVal.Ostan=ddlOstan.SelectedValue.ToString();
}
else
{
retVal.city= Session["CityCode"].ToString();
retVal.Shahrestan= Session["ShahrestanCode"].ToString();
retVal.Ostan= Session["OstanCode"].ToString();
}
return retVal;
}


موفق باشید

niloofar21
پنج شنبه 17 فروردین 1391, 00:29 صبح
خیلی خیلی ممنون از راهنماییتون.من این کلاسو تعریف کردم و اون متد را هم در code behind گذاشتم .حالا میخوام از این متغیرهایی که این جا خروجی گرفتم استفاده کنم ولی retVal.Ostan را به عنوان مثال در همون صفحه ای که اون متد را گذاشتم ازش ایراد میگیره. کار خاص دیگه ای باید انجام بدهم ؟

A.S.Roma
پنج شنبه 17 فروردین 1391, 00:36 صبح
متن ارور و نحوه ی استفاده رو بنویسید.

p.yazdkhasti
پنج شنبه 17 فروردین 1391, 00:49 صبح
سلام
شما لازم است که یک کلاس با نام City بسازید. این کلاس 3 عدد Property با نام های CityName ، OstanName و ShahrestanName دارد. البته بهتر است به جای اسامی فارسی در نام ها از اسامی انگلیسی استفاده نمایید. در مرحله بعد یک کلاس دیگر با نام User بسازید و برای هر یک از اقلام اطلاعاتی مورد نیاز user یک Property در آن ایجاد نمایید. سپس یک کلاس دیگر با نام برای مثال CityBLL بسازید. این کلاس یک متد با نام GetUserCities دارد که به عنوان پارامتر ورودی User را می گیرد و سپس در خروجی برای مثال یک آرایه از کلاس City را باز می گرداند. در این متد شما اطلاعات کاربر که به عنوان ورودی ارسال شده است را بررسی می کنید،سپس در همین متد یک آرایه از نوع City ایجاد می کنید و برای شهر هایی که کاربر دسترسی مشاهده آن را دارد یک نمونه از کلاس City به همراه اطلاعات آن ایجاد می کنید و آن را در آرایه قرار می دهید. در آخر این آرایه را به عنوان خروجی متد استفاده می کنید. سپس در صفحات خود از کلاس CityBLL و مند GetUserCities استفاده می کنید.این پاسخ خلاصه است. مراحل ذکر شده را انجام دهید و در صورت وجود سوال آن را مطرح کنید.

C#.net
پنج شنبه 17 فروردین 1391, 09:13 صبح
خیلی خیلی ممنون از راهنماییتون.من این کلاسو تعریف کردم و اون متد را هم در code behind گذاشتم .حالا میخوام از این متغیرهایی که این جا خروجی گرفتم استفاده کنم ولی retVal.Ostan را به عنوان مثال در همون صفحه ای که اون متد را گذاشتم ازش ایراد میگیره. کار خاص دیگه ای باید انجام بدهم ؟

برای استفاده از خروجی متد باید اون رو فراخوانی کنید ، اسکوپ retVal فقط در همون متد هست، باید این کار رو کنید:

MyMethod().Ostan



کلاس CityInfo رو باید جایی تعریف کنید همه ی مصرف کننده های متودتون اون رو ببینند. حدس می زنم کلاس رو داخل همون کلاسی که متد رو تعریف کردید گذاشتید، پشنهاد می کنم در پروژتون:

Add -> New class

کنید و کلاس CityInfo رو ذر یک فایل مجزا قرار بدید و هر جا که از متد استفاده می کنید یادتون نره که namespace که کلاس توش تعریف شده رو using کنید

niloofar21
پنج شنبه 17 فروردین 1391, 12:41 عصر
من یک کلاس از قسمت add new item> class به پروژه اضافه کردم .بعد در قسمتcode behind صفحه ام اون متد را نوشتم و برای خروجی هم از چیزی که گفتید استفاده کردم.واقعا کمک بزرگی بود .ازتون ممنونم