2013-04-06 120 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;} 
} 

對象被引用對待,所以應該爲你工作。