نمایش نتایج 1 تا 4 از 4

نام تاپیک: ایجاد کلاس از طریق String

  1. #1
    مدیر بخش آواتار salehbagheri
    تاریخ عضویت
    خرداد 1386
    محل زندگی
    In Hearts
    سن
    34
    پست
    2,225

    ایجاد کلاس از طریق String

    سلام دوستان!

    من یه متغیر از نوع String دارم كه به صورت زیر است!


    string strClass;
    strClass = "public class className\n{\nstring str;\n ...\n}";


    همانطور كه ميبينيد كلاسي در اين متغير ذخيره شده!

    چگونه ميشه اين كلاس رو در پروژه خودمون ايجاد كنيم! (به صورت Runtime)

    با تشکر!
    امیدم به دستان زیبای اوست . آنکه می آید . همان که نامش منجی ست ....

    به راستی اگر غرق نبودیم چرا مارا به منجی ای نیازمند کرده اند؟ ... دنیا دریاست ....

    دلنوشته های من


  2. #2

    نقل قول: ایجاد کلاس از طریق String

    کسی نبود جواب بده ؟
    منم نیاز دارم.

  3. #3

    نقل قول: ایجاد کلاس از طریق String

    سی شارپ فعلا تابع eval یا REPL یا همچین چیزی نداره (امیدواریم! در نسخۀ 5 اضافه بشه. آندرس یه چیزایی می گفت... )
    مونو همچین چیزی داره:
    http://tirania.org/blog/archive/2008/Sep-10.html
    http://mono-project.com/CsharpRepl
    البته تو میتونی خودت با Reflection.Emit همچین کاری بکنی (ولی انتظار نداشته باش خیلی ساده باشه)

    راستی تاپیکت تکراریه ها! https://barnamenevis.org/showthread.php?t=150811
    We work in the dark, we do what we can, we give what we have.
    Our doubt is our passion and our passion is our task.
    The rest is the madness of art

  4. #4
    کاربر دائمی آواتار mostafaaa
    تاریخ عضویت
    دی 1386
    محل زندگی
    جزیره کیش
    پست
    723

    نقل قول: ایجاد کلاس از طریق String

    سلام دوست من
    با استفاده از کلاس ها و اشیای فضا نام CodeDom میشه یه کارهایی کرد من قبلا چندتا مثال توی تالار VB.net گزاشته بودم ، اینم هم به زبان C#‎ شاید بتونه کمکتون کنه.
            public object ProcessCommand(String command)
    {
    CSharpCodeProvider Provider = new CSharpCodeProvider();
    CompilerParameters Parameters = new CompilerParameters();
    CompilerResults Result;
    String Source;
    Parameters.GenerateExecutable = false;
    Parameters.GenerateInMemory = true;
    Parameters.ReferencedAssemblies.Add("System.dll");
    Parameters.ReferencedAssemblies.Add("System.Window s.Forms.dll");
    Source = "using System;" + Environment.NewLine +
    "using System.Windows.Forms;" + Environment.NewLine +
    "namespace ns {" + Environment.NewLine +
    "public class Class1 {" + Environment.NewLine +
    "public static object Evaluate(){" + Environment.NewLine +
    "return " + command + Environment.NewLine +
    "}" + Environment.NewLine +
    "}" + Environment.NewLine +
    "}";
    Result = Provider.CompileAssemblyFromSource(Parameters, Source);
    if (Result.Errors.Count > 0)
    {
    MessageBox.Show(Result .Errors [0].Line + " " + Result.Errors[0].ErrorText);
    }
    else
    {
    MethodInfo Info = Result.CompiledAssembly.GetType("ns.Class1").GetMe thod("Evaluate");
    return ((object)Info.Invoke(null, null));
    }
    return null;

    }

    برای تستش میتونی این رو امتحان کنی :
              int  result = ((int)ProcessCommand("(5*6)*100-40;"));
    MessageBox.Show(result .ToString ());

    یا علی

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •