C# 动态实例化

MB.*_*MB. 3 c# reflection

我在这里需要一些关于在 C# 中进行动态实例化的帮助。我想要完成的是能够使用在实例化中用作名称的字符串变量。我认为你可以使用反射或其他东西,但我对这个迷路了。这是我的测试代码片段,希望有人有答案。

平均值与处理所有内容的类相关联。因此,假设我想对变量进行测试,并且与测试字符串相关的所有内容都可以作为实例化传递。我如何创建一个可以处理传入、编译和在运行时使用的变量测试的对象?我知道这听起来可能很不寻常,但我没有使用许多带有多个双精度声明的 IF。我可以使用动态实例化。任何可以帮助我的人将不胜感激。

Averages test = new Averages();
 double[] testresult;
 testresult = test.sma();
Run Code Online (Sandbox Code Playgroud)

womp,,,我想动态声明双打数组。我已经知道如何声明一个静态数组。我想要完成的是消除声明 30 个数组,这些数组基本上用不同的命名一遍又一遍地做同样的事情。

所以不要这样做:

                if (UITAName == "SMA")
                {
                    Averages sma = new Averages();
                    double[] smaresult;
                    smaresult = sma.sma(UITAName, YVal, UITPeriod, UITShift);
                    chart1.Series[UITA].Points.DataBindXY(test2, test1);

                }
                if (UITAName == "TMA")
                {
                    Averages tma = new Averages();
                    double[] tmaresult;
                    tmaresult = tma.tma(UITAName, YVal, UITPeriod);
                    chart1.Series[UITA].Points.DataBindXY(XVal, tmaresult);
                }

                else
                    if (UITAName == "EMA")
                    {
                        Averages ema = new Averages();
                        double[] emaresult;
                        emaresult = ema.ema(UITAName, YVal, UITPeriod);
                        chart1.Series[UITA].Points.DataBindXY(XVal, emaresult);
                    }
Run Code Online (Sandbox Code Playgroud)

我想对所有事情只做一次,而不是做 IF 语句。问题是您无法使用字符串声明进行编译。必须有一种方法,我只是不知道如何。

平均值 UITAName = 新平均值 (); double[] UITANameresult; UITANameresult = UITAName.UITAName(UITAName, YVal, UITPeriod); chart1.Series[UITA].Points.DataBindXY(XVal, UITANameresult);

wom*_*omp 5

您可以使用Activator.CreateInstance使用反射动态实例化一个类。

Activator.CreateInstance("MyAssembly", "MyType");
Run Code Online (Sandbox Code Playgroud)

但是,我并不完全清楚您要做什么。如果您已经有一个名为 Averages 的类,那么您需要动态实例化什么?我有点担心你的意思是它“与处理所有事情的类有关”......

  • 嗯……让我反思一下。+1 (2认同)