在一个类中声明一个列表,它在每个实例中都是相同的列表?

时间:2013-10-07 00:11:11

标签: c# list class encapsulation

我创建了一个这样的类:

public class MyClass
 {
     public List<int> Params = new List<int>();

      public void Load(int data)
        {
            Params.Add(data);
        }
}

然后我开始,比方说,三个班级实例。

MyClass one = new MyClass();
MyClass two = new MyClass();
MyClass three = new MyClass();

添加包含数据的列表:

one.Load(10);
two.Load(50);
three.Load(100);
当我检查时,我很惊讶:

one.Params.Count();

计数是3,也是

two.Params.Count(); 

也是3

每个实例列表都有三个数字 - 即相同的列表。 不知怎的,而不是分开的列表,我有指向同一列表的指针。 你会如何将它与每个实例分成三个不同的独立列表?

2 个答案:

答案 0 :(得分:0)

默认情况下应该这样。你确定你没有让班级或领域静止吗?

使用以下代码

    public class MyClass {
        public List<int> Params = new List<int>();
        public void Load(int data) {
            Params.Add(data);
            }
        }

class Program {
    static void Main(string[] args) {
        var one = new MyClass();
        var two = new MyClass();
        var three = new MyClass();

        one.Load(25);
        two.Load(50);            
        three.Load(75);

        Console.WriteLine(one.Params.Count());

        }
     }

我得到预期的答案1,当我使用调试器检查第二和第三类时,我也看到他们的列表只包含一个项目。

答案 1 :(得分:0)

似乎您在原帖中提供的代码没有任何问题。

点击here查看以下代码的实时输出。

using System.IO;
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
       MyClass one = new MyClass();
        MyClass two = new MyClass();
        MyClass three = new MyClass();

        one.Load(10);
        two.Load(50);
        three.Load(100);

        System.Console.WriteLine("One.Count  " + one.Params.Count);
        System.Console.WriteLine("Two.Count " +two.Params.Count);
        System.Console.WriteLine("Three.Count  "+ three.Params.Count);
    }
}

public class MyClass
 {
     public List<int> Params = new List<int>();

      public void Load(int data)
        {
            Params.Add(data);
        }
}

所有One.Params.Count,Two.Params.Count和Three.Params.Count正在返回1.

正如评论中指出的那样,你可能会将Params声明为静态。在这种情况下,输出将为3,因为所有实例共享相同的List。