سلام دوست خوبم....
روشی که معرفی کردید رو من در ویژوال بیسیک 6 دنبالش میگشتم ولی متاسفانه به جایی نرسید .....
خیلی خوبه که در #C چنین امکانی وجود داره......اگه امکانش هست کمی بیشتر هم در موردش توضیح بفرمایید چون فکر میکنم سوال خیلی ها باشه....
ولی میخوام بدونم که میشه هر قسمت از کدهای برنامه رو با این روش جایگزین کنیم؟
مثلا در یک قسمت از برنامه : Y=.....code
میشه به جای code از این روشی که فرمودید استفاده کرد؟یعنی code رو با رشته ورودی جایگزین کرد؟
با تشکر
کاری نیست که نشه با به این شیوه انجام داد چون در نوشتن کد هیچ محدودیتی ندارید، هر چی که بنویسید کامپایل
میشه و بعد می توانید اجرایش کنید، ولی صرفا زمانی قابل استفاده است که امکانات کامپایل کردن کد در سیستم
فراهمه، روی سیستمی که Windows SDK و کامپایلر #C نصب نیست صرفا با Net Framework. اجرا نمیشه چون
کامپایلری برای کامپایل کردن کد #C وجود نداره. به همین جهت اگر بخواهید برنامه را به شخص دیگری بدهید
باید مطمئن شوید که Visual Studio را نصب کرده باشد.
مساله دیگر سرعت اجرا است، اگر بخواهید یک یا چند حلقه محاسباتی بسازید، بهتر است که کد فرمول تان فقط یک بار
قبل از حلقه کامپایل شود و داخل حلقه فقط پارامتر اش را تغییر دهید، وگرنه کامپایل کردن کد هر بار که حلقه
اجرا می شود سرعت اجرا را خیلی کند خواهد کرد.
کد را طوری باز نویسی کردم که در کلاس ClassEVal سه تابع EVal و GetAssembly و EvalAssembly دارد.
تابع EVal عبارت مورد نظر را بصورت یک عدد double بر می گرداند، مثلا عبارت "2 + 3 * (Math.Pow(4, 5"
هر بار که EVal را فراخوانی کنید عبارت را در یک کد کامپایل خواهد کرد، پس سرعت اجرای بالایی ندارد.
تابع GetAssembly از شما یک عبارت را دریافت می کند که در آن متغیر x مجهول است و آنرا کامپایل می کند
و سپس Assembly اش را بر می گرداند. این Assembly را بعدا در تابع EvalAssembly بکار خواهید برد.
تابع EvalAssembly از شما Assembly و مقدار متغیر مجهول x را دریافت می کند و حاصل عبارت را بصورت
بصورت یک عدد double بر می گرداند. از آنجایی که Assembly قبلا کامپایل شده و EvalAssembly فقط آنرا
اجرا می کند سرعت اجرایش به مراتب بیشتر از EVal است، مخصوصا اگر بخواهید یک عبارت را چندین بار
اجرا کنید بهتر است بجای چندین EVal از ترکیب یک GetAssembly و چندین EvalAssembly استفاده کنید.
به مثال پیوستی مراجعه شود :
EValFunction.zip