假设我有一个Foo
类型的对象,在初始化时,它将是immutable
。由于这些对象是不可变的,并且我希望能够访问任何这些Foo
对象,因此我将这些对象初始化并存储在static class
(FooHandler
)中,其中包含{{1}所有list
个对象。
目前,如果某个类想要访问此对象,我会在Foo
的列表中为Foo
对象提供FooHandler
对象的位置索引,并为getter method
需要时返回对象本身。这样做的目的是通过不使两个相同的对象在流通中来节省内存(我认为这是浪费)。
在 C#中是否有更好的方法来引用这些对象(如指针或类似的东西)或完全更好的结构来解决这个问题,因为我觉得给一个不可变的索引对象过于hackish和容易出错?
示例代码:
public class Foo {
public int A { get; private set; }
public int B { get; private set; }
public Foo(int a, int b) {
A = a;
B = b;
}
}
public static class FooHandler {
private static List<Foo> fooList;
static FooHandler() {
fooList = new List<Foo>();
fooList.Add(new Foo(1, 2));
fooList.Add(new Foo(3, 4));
}
// Assume there is error checking
public static Foo GetFoo(int index) {
return fooList[index];
}
}
public class Bar {
public int FooID { get; private set; }
public Bar(int fooID) {
FooID = fooID;
}
public void func() {
Console.WriteLine(FooHandler.GetFoo(FooID).A);
}
}
注意:我知道这个例子可能被认为是可变的,只是想在没有太多测试的情况下快速输入内容。
答案 0 :(得分:3)
C#已经使用引用(大致相当于指针)传递引用类型(用class
表示)。
你不需要做任何特别的事情来获得这个并且它会自动发生。直接返回Foo
没有浪费。