在运行时创建类实例并同时进行初始化

本文关键字:初始化 运行时 创建 实例 | 更新日期: 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();