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