PDA

View Full Version : سوال: اجرا کردن class ها در console application



morika
شنبه 18 مهر 1394, 20:05 عصر
سلام
من یه برنامه کنسول دارم که توش کلی کلاس برای انجام دادن کارهام نوشتم. اما مشکل اینجاست که مدیریت این کلاس ها یکم سخت شده. نحوه برنامه نویسی من به این شکل هست که مثلا اگر دستور زیر وارد بشه:
renam "e:\music\salar aghili\serre hezarsale" 01 own
این دستور یعنی تمام فایلهای موجود در فولدر مورد نظر rename بشن به این صورت که اسم خود فایل حفظ بشه وفقط اعداد از 01 شروع بشن و به اول فایل اضافه بشن. یعنی فایلها بشن.
برنامه نویسی من به این شکل هست که اول برنامه دستور rename رو با یه switch تشخیص میده بعد پارامترهایی که بعداز دستور فرستاده به متد rename می فرسته.
برای اینکار من برای هر متدی که تو برنامه دارم باید یه case بنویسم که خیلی زیاد شده.
حالا سوال من اینه که راهی هست که با یک خط کد به کنسول بگیم بره بگرده متدی که همنام با اوین کلمه نوشته شده در دستور هست (rename) رو پیدا کنه و پارامترهای بعدی رو به این کلاس ارسال کنه؟
البته همه متدها توی یک کلاس قرار دارن بخاطر همین احتیاجی به پیدا کردن کلاس نیست فقط باید متد همنام با دستور پیدا بشه. مبنای تشخیص پارامتر ها از هم command.split(' ') هستش
یعنی با یک خط کد تمام کار اون switch و دردسرهای ارسال پارامتر رو انجام بده.
ممنون

am_al_59
دوشنبه 27 مهر 1394, 06:09 صبح
شما باید از Reflection استفاده کنی
برای کار شما با Reflection میتونی متد رو انتخاب کرده و پارامتر هاشو تنظیم کنی و اوانو اجرا کنی
اما قبلش باید اون قسمت switch case برنامت رو تبدیل کنی به چند تا متد یعنی هر case تبدیل میشه به یک متد جدا با نامی که در case چک میکنی
بعد با متد GetMethod تایپ مربوط به اون کلاسی که متد هاتو توش تعریف کردی میتونی متد مورد نظرتو با نام تشخیص بدی
نوعی که بر میگردونه کلاس MethodInfo هست که هم میتونی اونو بریزی توی یک متغیری از همین نوع و هم میتونی مستقیماً با متد invoke متد پیدا شده رو فراخوانی کنی
اگر در کدت یک یا چند متد رو override کردی هم میتونی به هر کدوم از پیاده سازی هات یک attribiute بدی و با همون متد GetMethod مورد مناسب پارامترهای دریافتی رو تشخیص بدی