1

私の状況を説明させてください。外部接続を読み取り、整数 (またはブール値) の配列を提供するプログラムがあります。これらの入力は、いくつかのプロパティ (X、Y、Z など) を持つオブジェクトをフィードする必要があります。したがって、配列の値を読み取る場合は、それらの値をプロパティに書き込む必要があります。これらの値を ref (たとえば) で渡す方法はありますか? 論理的に考えると、最善の方法はポインター (配列 [0] を指すプロパティ X) ですが、これらは私にはあまり明確ではありません。

配列の変更を検索する方法を作成できます (ただし、配列は非常に大きく、+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 の場合も同様です。

4

1 に答える 1

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; }
}

refOPで見せた荘園では使えません。参照によって渡された値を格納することはできません。可能であれば、スタックに何らかの値を渡すことになり、参照を保持する作成されたオブジェクトがスタック上のアイテムよりも長く存続する可能性があります。それが起こった場合、意図した変数を保持していないメモリ内の場所を参照することになります。これは、C# の設計者が (少なくとも多くの作業を行わなければ) 発生しないように最善を尽くした、C++ の落とし穴のようなものでした。

于 2012-08-29T17:30:22.487 に答える