链接两个属性/变量

时间:2012-08-29 17:25:19

标签: c#

让我解释一下我的情况。我有一个程序谁读取外部连接,并给我一个整数(或布尔)数组。这些输入应该提供具有某些属性的对象(例如,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。

1 个答案:

答案 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#的设计者竭尽全力确保不会发生(至少没有很多的工作)。