【问题标题】:How can I create more instances of same object in C#? [closed]如何在 C# 中创建同一对象的更多实例? [关闭]
【发布时间】:2018-06-27 17:41:26
【问题描述】:

有一个简单的代码:

class Test
{
    public int number;
    public void method()
    {
        Console.WriteLine("Something");
    }
}

class Program
{
    public static void Main(string[] args)
    {
        while(true)
        {
            Test obj=new Test();
            obj.number=3;
        }           
    }
}

这个程序每时每刻都将 obj 的“数量”设置为 3。但是我想在每个循环中自动创建一个完全另一个独特的对象,其中包含原始对象的内容副本。如果我创建一个具有相同名称的对象,它将被覆盖。 我自然不想在死循环中使用它,这将毫无意义,但这是解释我的问题的最简单方法。

【问题讨论】:

  • 你在每个循环中创建新对象,因为块作用域,每个循环你用obj变量创建一个对象,并在循环结束时销毁它,然后在下一个循环中重新创建它打勾……
  • 你为什么要问这个问题?这可能会帮助其他人帮助你。

标签: c# object copying


【解决方案1】:

有几种方法可以做到这一点。

我的第一个想法是使用工厂方法(它只返回一个类的实例)。它看起来像这样。

public Test TestFactory()
{
    return new Test() { number = 3 };
}

或者在 Test 类中添加一个构造函数来获取一个 Test 的实例:

// inside Test class
public Test(Test that)
{
    number = that.number;
}

【讨论】:

    【解决方案2】:

    您每次迭代都在创建新对象,但您只保留对最后创建的对象的引用。

    public static void Main(string[] args)
    {
        var myOjects = new List<Test>();
    
        int startIndex = 1;
    
        while(true)
        {
            Test obj=new Test();
            obj.number=startIndex;
    
            myObjects.Add(obj);
    
            startIndex = startIndex + 1;
    
            if (startIndex > 5) break;
        }           
    }
    

    现在您可以浏览列表中的所有对象:

    foreach (var obj in myObjects) obj.method();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-23
      • 1970-01-01
      • 1970-01-01
      • 2012-01-13
      • 2021-07-22
      相关资源
      最近更新 更多