-5

コードに問題があります。ようやく取得できたのでエラーはありませんでしたが、今度はスタックオーバーフローに対処する必要があります...

誰かが私のコードの何が問題なのか教えてもらえますか?

    public Matrix Projection
    {
        get { return Projection; }
        protected set 
        {
            Projection = value;
            generateFrustum();
        }
    }

お役に立てれば幸いです!

ありがとう

4

4 に答える 4

23

set メソッドはそれ自体を呼び出します: Projection = value.

private Matrix _projection = null;
public Matrix Projection
{
    get { return _projection; }
    protected set 
    {
        _projection = value;
        generateFrustum();
    }
}

次のフォームを使用する場合:

public Matrix Projection { get; set }

実際の値を格納する変数を指定する必要はありませんが、get または set を明示的に実装する場合は、追加の変数を宣言し、get および set の実装で使用する必要があります。

于 2012-06-03T13:51:35.637 に答える
4

プロパティのセッターとゲッターはメソッド (get_X と set_X) として実装されます。

Projection = valueプロジェクションのセッター内に書き込むと、 set_Projection()from withinへの再帰呼び出しが発生しますset_Projection()。( も同様get_Projection()です。)

呼び出しを取り巻く条件がないため、再帰は無限です。

に関してはpublic T PropA { get; set; }、次のシュガー構文です。

private T _PropA;

public T PropA
{
    get
    {
        return _PropA;
    }
    set
    {
        _PropA = value;
    }
}

あなたがすべきことは次のとおりです。

private Matrix _projection;

public Matrix Projection
{
    get
    {
        return _projection;
    }
    protected set 
    {
        // Make sure that Matrix is a structure and not a class
        // override == and != operators in Matrix (and Equals and GetHashCode)
        // If Matrix has to be a class, use !_project.Equals(value) instead

        // Consider using an inaccurate compare here instead of == or Equals
        // so that calculation inaccuracies won't require recalculation

        if (_projection != value)
        {
            _projection = value;
            generateFrustum();
        }
    }
}
于 2012-06-13T14:57:53.893 に答える
4

getand関数で無限再帰を定義していますset

get { return Projection; }

次と同等です。

get { return get();}.
于 2012-06-03T13:53:08.900 に答える
0
public T PropA { get; set; } 

実際にはの構文です

T _PropA; public T PropA { get { return _PropA; } set { _PropA = value; } }

だから答えは

private Matrix _projection = null;
public Matrix Projection
{
    get { return _projection; }
    protected set 
    {
      _projection = value;
      generateFrustum();
    }
}

詳細については、以下の例を参照して
ください http://msdn.microsoft.com/en-us/library/ms228503.aspx
http://msdn.microsoft.com/en-us/library/w86s7x04(v=vs. 80).aspx

于 2012-06-13T14:24:08.870 に答える