C# 在类中声明一个列表,它';每个例子都是一样的吗?

C# 在类中声明一个列表,它';每个例子都是一样的吗?,c#,list,class,encapsulation,C#,List,Class,Encapsulation,我创建了这样一个类: public class MyClass { public List<int> Params = new List<int>(); public void Load(int data) { Params.Add(data); } } 添加包含数据的列表: one.Load(10); two.Load(50); three.Load(100); 当我检查时,令人惊讶的

我创建了这样一个类:

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

      public void Load(int data)
        {
            Params.Add(data);
        }
}
添加包含数据的列表:

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

one.Params.Count();
计数也是3

two.Params.Count(); 
也是3

每个实例列表都有三个数字,即相同的列表。 不知何故,我得到了指向同一个列表的指针,而不是分开的列表。
对于每个实例,如何将其划分为三个不同的独立列表?

默认情况下应该是这样。您确定没有将类或字段设置为静态吗

使用以下代码

    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());

        }
     }
公共类MyClass{
public List Params=new List();
公共无效荷载(整数数据){
参数添加(数据);
}
}
班级计划{
静态void Main(字符串[]参数){
var one=新的MyClass();
var two=新的MyClass();
var三=新的MyClass();
1.负载(25);
2.负载(50);
三、负荷(75);
Console.WriteLine(one.Params.Count());
}
}

我得到了预期的答案1,当我使用调试器检查类2和类3时,我还看到它们的列表只包含1项。

您在原始帖子中提供的代码似乎没有任何错误

单击以查看以下代码的实时输出

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);
        }
}
使用System.IO;
使用制度;
使用System.Collections.Generic;
班级计划
{
静态void Main()
{
MyClass one=新的MyClass();
MyClass 2=新的MyClass();
MyClass三=新的MyClass();
1.负载(10);
2.负载(50);
3.负载(100);
System.Console.WriteLine(“One.Count”+One.Params.Count);
System.Console.WriteLine(“2.Count”+2.Params.Count);
System.Console.WriteLine(“三点计数”+三点参数计数);
}
}
公共类MyClass
{
public List Params=new List();
公共无效荷载(整数数据)
{
参数添加(数据);
}
}
所有1.Params.Count、2.Params.Count和3.Params.Count都返回1


正如注释中指出的,您可能正在将参数声明为静态的。在这种情况下,输出将是3,因为所有实例共享相同的列表。

您的代码无法编译。请出示您的实际代码。您可能误用了
static
,或者忘记复制某些内容。由于发布的代码未编译(由于
Public
Params
的声明中大写),因此无法显示声明的行为,所以您被否决了。我已编辑了您的标题。请参阅“”,其中的共识是“不,他们不应该”。感谢您的评论和帮助。我将尝试在以后的问题中发布工作代码,而不仅仅是概念。谢谢,我的错。我在一次又一次地处理同一个实例时发现了这个错误,从而复制了它。也许现在已经很晚了。谢谢你,你的回答让我意识到了错误,并且很快就改正了。
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);
        }
}