在运行时创建类实例并同时进行初始化
本文关键字:初始化 运行时 创建 实例 | 更新日期: 2023-09-27 18:05:07
我正在尝试以下代码在运行时创建一个类的多个实例,并希望初始化,但它给出错误:
不能在此范围内声明名为'inum'的局部变量,因为它会给"inum"一个不同的意思,它已经在"父或当前"作用域表示其他内容。
public class MyClass
{
static int i=0;
class A
{
public A()
{
}
}
public static void Run()
{
string inum = "i";
for (int j=1;j<=5;j++)
{
inum = inum + j.ToString();
//Initialize Instance
A inum = new A();
}
}
}
您似乎试图"动态地"使用变量名。这在c#中不起作用,你应该改变你对变量的看法。如果您想创建多个实例,请声明一个数组:
public class MyClass
{
static A[] instances;
class A
{
public A()
{
}
}
public static void Run()
{
instances = new A[5];
for (int j=0;j<5;j++)
{
instances[j] = new A();
}
}
}
c#中不能有动态变量。您正在尝试的追加是附加值,而不是变量指针。
宁可这样用
Dictionary<int, A> inum = new Dictionary<int, A>();
for (int j=1;j<=5;j++)
{
//Initialize Instance and add to dictionary
inum.Add(j, new A());
}
您可以通过键名获得它们。还有其他几种方法可以将实例存储为集合
我不是一个c#程序员,但根据Java和任何其他类似语法语言的规则,我所知道的,你正在做的是试图用一个新的类型重新声明'inum',在它被声明为一个字符串在相同的作用域。
另一点是,即使不是这种情况,您也没有创建多个实例,而是用新实例填充同一变量5次,这只会产生一个实例(最后一个)。
从快速阅读c#教程我认为这是你想要的东西。我不确定你想用'inum'变量做什么,所以它消失了,静态变量' I'也消失了:
public class MyClass
{
class A
{
public A()
{
}
}
public static void Run()
{
// Declare array to hold instances
A[] instances;
// instances is now five elements long
instances = new A[5];
for (int j=0;j<5;j++)
{
//Initialize Instance
instances[j] = new A();
}
}
}
这将在Run方法的作用域中产生一个由5个对象组成的名为"instances"的数组——你可能希望它在类本身的作用域中,可能作为静态属性。
作为旁注,对于这样的操作(使用var 'j'),最好从0开始,而不是1,上面的代码反映了这一点。
不能将A类型的变量命名为"inum"(已经存在一个这样的变量)
你必须给它另一个名字,比如:
A anyOtherName = new A();
尝试用不同的名称命名变量A
A objA = new A();