PDA

View Full Version : سوال: خلاصه نویسی در برنامه نویسی



alireza_tavakol
چهارشنبه 31 تیر 1388, 15:13 عصر
من توی برنامه ام در بخش settings چند تا فیلد تعریف کردم و بعد توی برنامه ام وقتی قرار مقدار این فیلد ها را بخونم از کد زیر استفاده میکنم

string fn1 = Properties.Settings.Default.field_name1.ToString() ;
string fn2 = Properties.Settings.Default.field_name2.ToString() ;


به نظر شما راهی و جود داره که این قدر کد تکراری ننویسم
مثلا"


Properties.Settings.Default pointer;
string fn1 = pointer.field_name1;
string fn1 = pointer.field_name1;

البته من فرض کردم متغییر pointer داره مثلا به ما قبل خوده اشاره میکنه !:گیج:

hozouri
چهارشنبه 31 تیر 1388, 15:26 عصر
دوست عزیز یه کلاس تعریف کن و توی اون متدها را هم بخون هم ذخیره کن.

alireza_tavakol
چهارشنبه 31 تیر 1388, 17:20 عصر
یعنی کلا راهی وجود نداره که که بشه یک متغییر تعریف کرده که نماینده یک namespace.class.propertic باشه ؟:متفکر:

RED-C0DE
پنج شنبه 01 مرداد 1388, 19:43 عصر
تا این حدی ک گفتی نمی شه ولی می شه تا چند مرحله رو خلاصه کرد :



using kholase = YOURNameSpace.Properties.Settings;

Mahdi.Kiani
جمعه 02 مرداد 1388, 00:16 صبح
private Properties.Settings settings = new Properties.Settings();

alireza_tavakol
جمعه 02 مرداد 1388, 01:22 صبح
با تشکر لطفا توضیح دهید که :

اولا") چه طور شد تا وقتی از مسیر کامل استفاده میکردم باید کلمه Default رو هم می نوشتم ولی الان که یک نمونه از کلاس Settings ساختم دیگه لازم نیست بنویسم ( Default .شی ساخته شده )

دوما") حالا اگه فرض کنیم من یک کلاس نوشته باشم که static باشه بعد توش یک کلاس nested دیگه باشه که اونم استاتیک و در نهایت یک فیلد داشته باشم و بعد بخواهم یک متغییر داشته باشه که دقیقا به این فیلد اشاره که ، چطوری باید این متغییر رو تعریف کنم؟

Mahdi.Kiani
جمعه 02 مرداد 1388, 09:00 صبح
با تشکر لطفا توضیح دهید که :

اولا") چه طور شد تا وقتی از مسیر کامل استفاده میکردم باید کلمه Default رو هم می نوشتم ولی الان که یک نمونه از کلاس Settings ساختم دیگه لازم نیست بنویسم ( Default .شی ساخته شده )


امضای این کلاس به صورت زیر می باشد:

internal sealed partial classپس این کلاس قایل نمونه سازی می باشد (قایل ارث بری نمی باشد. چرا؟) علاوه بر این می توان بدون نمونه گیری به اعضای استاتیک آن دسترسی داشت.چرا؟
درون این کلاس یک property به نام Default تعریف شده است.(همان Default ای که ازش استفاده می کنید). کار این خاصیت اینه که یک نمونه از خود کلاس براتون بر می گردونه. در واقع عمل نمونه گیری را براتون انجام میده. این property از نوع استاتیک می باشد.
تعریف این Property به این شکل می باشد:


private static Settings defaultInstance = ((Settings)(global::System.Configuration.Applicati onSettingsBase.Synchronized(new Settings())));

public static Settings Default {
get {
return defaultInstance;
}
}



پس می توانید بدون نمونه گیری از کلاس Setting و توسط این خاصیت یک نمونه از کلاس ایجاد کنید.
از طرفی به ازای هر Setting ای که شما تعریف می کنید یک Property با همان نام در این کلاس ایجاد می شود.امضای این Property ها بصورت زیر میباشند:
(یک نمونه از Setting ها که از نوع string می باشد:)

[global::System.Configuration.UserScopedSettingAttr ibute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttr ibute()]
[global::System.Configuration.DefaultSettingValueAt tribute("Test String")]
public string Test {
get {
return ((string)(this["Test"]));
}
set {
this["Test"] = value;
}
}

برای دسترسی به این خاصیت باید نمونه ای از کلاس داشته باشید(چرا؟)
پس نتیجتا برای دسترسی به property های تعریف شده در این کلاس می بایست نمونه از کلاس داشته باشید.حال این نمونه می تواند توسط خاصیت Default ایجاد گردد. یا می تواند به آن صورتی که در پست قبل بیان کردم استفاده کرد.


دوما") حالا اگه فرض کنیم من یک کلاس نوشته باشم که static باشه بعد توش یک کلاس nested دیگه باشه که اونم استاتیک و در نهایت یک فیلد داشته باشم و بعد بخواهم یک متغییر داشته باشه که دقیقا به این فیلد اشاره که ، چطوری باید این متغییر رو تعریف کنم؟هر سوال در یک تاپیک
موفق باشید./

samirdev
دوشنبه 05 مرداد 1388, 00:26 صبح
فکر کنم از کد زیر هم بشه استفاده کرد. البنه باید به System.Configuratin رفرنس داد.


string fn1 = ConfigurationManager.AppSettings["fn1"]