我在这里需要一些关于在 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);
您可以使用Activator.CreateInstance使用反射动态实例化一个类。
Activator.CreateInstance("MyAssembly", "MyType");
Run Code Online (Sandbox Code Playgroud)
但是,我并不完全清楚您要做什么。如果您已经有一个名为 Averages 的类,那么您需要动态实例化什么?我有点担心你的意思是它“与处理所有事情的类有关”......