2013-04-06 75 views
1

我有一个我制作的Character对象列表和一列可以包含一个字符的单元格。是否可以将我的Character对象添加到列表中,并将其分配给单元格,并在聚会列表或单元格中对其进行更改以在两个位置生成对象?我真的不知道指针如何解决这个问题。我认为会发生什么是列表中的对象与分配给单元的对象不同。C#列表对象

对不起,我的代码非常大,所以我不想在这里发布所有内容,但我所说的角色是我自定义的类。我想我的问题真的可以归结为两个问题。当我在列表中放入某些东西时,会改变指针指向的位置,或者是新对象聚集在一起。我也可以有多个指针,如果我添加一些东西到一个列表然后将其分配给字符对象的另一个实例将引用来自单元格对象的字符与从另一个列表对象引用我的字符相同。

+0

向我们展示你的代码,并告诉我们更多关于您的应用程序,以及如何你想它的行为。 'char'是原始类型,所以它们基本上是值,并且会具有值语义。但是你的问题的答案将取决于你的代码是什么样子。 – 2013-04-06 18:36:15

+1

看看Jon Skeet撰写的这两篇文章 - [参数在C#中传递](http://www.yoda.arachsys.com/csharp/parameters.html)和[Memory in .NET - what goes where](http ://www.yoda.arachsys.com/csharp/memory.html)。 – Tim 2013-04-06 18:41:08

回答

2

只要你的Character是一个类(即reference type),那么你基本上是存储对Character对象的引用。当通过任何其他引用访问对象时,通过引用对对象所做的任何更改都将可见。

例子:

class Character 
{ 
    public string Name { get; set; } 
} 

var c = new Character(); 
var c2 = c; 
var arr1 = new Character[] { c }; 
var arr2 = new Character[] { c }; 

arr1[0].Name = "Foo"; 
Console.WriteLine(arr2[0].Name); // "Foo" 
Console.WriteLine(c2.Name); // also "Foo" 
+0

所以我可以有两个引用到同一个对象?我有一个列表,它拥有它,然后我有另一个自定义对象,也需要访问该对象,但我不知道什么时候需要从自定义对象中引用我的字符,以及何时需要从列表中引用它。 – 2013-04-06 18:40:32

+0

甚至不止两个。 – Filip 2013-04-06 18:41:00

+1

@maxinfet:是的。无论何时使用赋值运算符或将“对象”传递给函数,都会创建对同一对象的新引用。 – Jon 2013-04-06 18:42:49

1

所以基本上你想把角色当作参考类型。

只需创建自己的包装对象,其中包含一个字符。

public MyCharacter 
{ 
public char character{get;set;} 
} 

对象被引用对待,所以应该为你工作。