让我解释一下我的情况。我有一个程序谁读取外部连接,并给我一个整数(或布尔)数组。这些输入应该提供具有某些属性的对象(例如,X,Y,Z)。因此,如果读取数组上的值,我应该在属性中写入这些值。有没有办法通过ref传递这些值(例如)?从逻辑上思考,最好的方式是指针(属性X指向数组[0]),但这些对我来说并不是很清楚。
我可以创建一种方法来查找数组中的更改(但是是一个非常大的数组,+ 60000),然后更新我的对象。但我认为这将是一个糟糕的意识形态。
对不起,如果我写了任何废话,我只是从C#开始。
一些伪代码可以帮助。
class obj
{
int X {get; set;}
public obj(ref int x)
{
X = x;
}
}
class main
{
void main()
{
int a;
obj test = new obj(ref a);
}
}
所以如果:a = 10,obj.X = 10。
答案 0 :(得分:0)
public class MyClass
{
private int[] backingArray;
public int X
{
get
{
if (backingArray == null)
return -1;
else
return backingArray[0];
}
}
public MyClass(int[] array)
{
if (array.Length > 0)
backingArray = array;
}
}
class Main
{
void Main()
{
int[] array = new int[] { 2 };
MyClass test = new MyClass(array);
array[0] = 6;
Console.WriteLine(test.X);//prints 6
}
}
当然这仅适用于引用类型(数组是引用类型)。如果你想用值类型做这整件事,你需要在一些引用类型中“包装”它。如果您没有方便的话,可以使用如下所示的类来包装任何内容。
public class Wrapper<T>
{
public T Value { get; set; }
}
在OP中显示的庄园中无法使用ref
。您将无法存储通过引用传递的值。如果可以,那么你最终可能会在堆栈上传递一些值,然后让创建的对象保持引用的时间比堆栈中的项目长。如果发生这种情况,你最终会引用它作为内存中一个不再包含你想要的变量的位置。这有点像C ++中的一个问题,C#的设计者竭尽全力确保不会发生(至少没有很多的工作)。