PDA

View Full Version : سوال: قرار دادن نام کلاس در متغیر



aliramazani
چهارشنبه 18 بهمن 1396, 03:31 صبح
من در طول برنامه از یک کلاس زیاد استفاده میکنم و زیاد ازش نمونه سازی میشه
راهی داره یه بار نام کلاس را بنویسم توی متغیر و هر بار دیگه اسم متغیر را به جای نام کلاس به کار ببرم؟
پ.ن
این کدها توی فرمهای دیگه هم تکرار میشه واسه همین نمیخوام لا به لای کدها توی فرمهای دیگه هی اسم کلاس بزارم
در اصل یه بار اول فرم اسم کلاس را بزارم توی متغیر که برای کپی پیست کدها فقط اسم کلاس را ابتدای کار تغییر بدم فقط

parvizwpf
چهارشنبه 18 بهمن 1396, 08:03 صبح
شما اگر میخواهید رعایت کنید و وابستگی هم نداشته باشید باید مسائل Dependency Injection رو رعایت فرمایید اینجوری بین کدهاتون دیگه کدی تکرار نمیشه

aliramazani
چهارشنبه 18 بهمن 1396, 17:38 عصر
اولین باره با این مبحث آشنا میشم یکم برام گنگه

ژیار رحیمی
چهارشنبه 18 بهمن 1396, 18:25 عصر
سلام
1- یک راهش دوست گرامی پیشنهاد دادن.اگر تا حالا با روش کار نکردین فعلا استفاده نکنید.
2- استفاده از الگوی طراحی Singleton هست
3- تبدیل کلاس به استاتیک کلاس هست.
4- راه ساده تر یک متغییر استانیک از نوع کلاس مذکور بسازید و در startup برنامه ،متغییر استایک را نمونه سازی کن.

aliramazani
چهارشنبه 18 بهمن 1396, 18:47 عصر
Activator.CreateInstance<T>()
نمی تونه جوابگو باشه؟

aliramazani
چهارشنبه 18 بهمن 1396, 18:57 عصر
سلام
1- یک راهش دوست گرامی پیشنهاد دادن.اگر تا حالا با روش کار نکردین فعلا استفاده نکنید.
2- استفاده از الگوی طراحی Singleton هست
3- تبدیل کلاس به استاتیک کلاس هست.
4- راه ساده تر یک متغییر استانیک از نوع کلاس مذکور بسازید و در startup برنامه ،متغییر استایک را نمونه سازی کن.

روش آخر خوبه ولی اگر من در حین برنامه نیاز باشه دوباره نمونه سازی انجام بدم؟
با این روش فکر کنم باید به جای ساخت کلاس سازنده دونه دونه فیلدهای کلاس در داخل فرم مقدار دهی بشه؟

ژیار رحیمی
چهارشنبه 18 بهمن 1396, 19:41 عصر
روش آخر خوبه ولی اگر من در حین برنامه نیاز باشه دوباره نمونه سازی انجام بدم؟
با این روش فکر کنم باید به جای ساخت کلاس سازنده دونه دونه فیلدهای کلاس در داخل فرم مقدار دهی بشه؟
چون متغییر استاتیک هست هر جای برنامه لازم بود نمونه جدید ساخته شود متغییر استاتیک را دوبار با نمونه جدید مقدار دهی کن. من دقیقا اطلاعی از کد کلاستون ندارم نمی تونم بیشتر راهنمایی کنم.اگر دقیقا توضیح بدی در کلاس چه چیزی را پیاده سازی کردی میشه بیشتر راهنمایی کرد

aliramazani
چهارشنبه 18 بهمن 1396, 21:09 عصر
ببینید
من نمیخوام اسم کلاس بیشتر از یکبار در فرم استفاده بشه. یعنی یه بار در ابتدای کدها کلاس تعریف بشه و هر جای فرم که از کلاس باید نمونه سازی بشه و مقادیر به کلاس سازنده پاس داده بشه نمیخوام مجدد اسم کلاس نوشته بشه. میخوام اگه راهی داره یه متغیر باشه.
مثلا ابتدای کار کلاس class1 را در یک متغیر بزارم و در طول برنامه نیام هر بار به این صورت عمل کنم:


Cls= new class1();

ali_md110
چهارشنبه 18 بهمن 1396, 21:32 عصر
وهله سازی در سازنده کلاس انجام بدید بصورت ترزیق وابستگی یا همون DP که دوستمون اشاره کردند
کافیه یک Interface و یک کلاس پیاده سازی کننده اون اینترفیس تعریف کنید
و در سازنده کلاس وهله سازی کنید

aliramazani
چهارشنبه 18 بهمن 1396, 22:20 عصر
پس بهترین راه همون تزریق وابستگیه به نظر شما

مهرداد صفا
پنج شنبه 19 بهمن 1396, 16:15 عصر
ببینید
من نمیخوام اسم کلاس بیشتر از یکبار در فرم استفاده بشه. یعنی یه بار در ابتدای کدها کلاس تعریف بشه و هر جای فرم که از کلاس باید نمونه سازی بشه و مقادیر به کلاس سازنده پاس داده بشه نمیخوام مجدد اسم کلاس نوشته بشه. میخوام اگه راهی داره یه متغیر باشه.
مثلا ابتدای کار کلاس class1 را در یک متغیر بزارم و در طول برنامه نیام هر بار به این صورت عمل کنم:


Cls= new class1();


سلام.
چیزی که نیاز دارید در زبان هایی مثل python شدنی هست ولی در C# کلاس به خودی خود شی نیست که مقدار داشته باشه و بتونید در یک متغیر قرار بدیدش.
گرچه منطقی نیست ولی اگر فقط با اسم کلاس مشکل دارید و مثلا قصد دارید از نام c1 به جای class1 استفاده کنید:


class c1:class1{}



این کار باعث ناخوانا شدن کد میشه. اگر قصد دارید کدنویسی رو راحتتر کنید بهتره پیشنهاد دوستان رو اجرا کنید و روال های پرتکرار رو در یک تابع جدا تعریف کنید. مثلا یک تابع برای ساخت نمونه از Class1:


public Class1 CreateClass1() => new Class1();


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