2

私が取り組んでいるUnity3dゲームの場合、簡単なゲッターで読み取り/書き込み可能なプロパティが必要な状況がありますが、セッターはさらに作業を行います。私のコードは次のようになります:

// IColor.cs
interface IColor {
    Color colorPainted { get; set; }
}

// Player.cs
public class Player : Monobehaviour, IColor {
    // ...
    public Color colorPainted {
        get { }
        set {
            colorPainted = value;
            // some other code
        }
     // ...
    }
}

でも、その部分をどうしたらいいのかわかりませんgetreturn colorPainted;スタックオーバーフローが発生するため、できません。値を返さないため、記述されたコードはコンパイルされません。

私はC#ウィザードではありませんが、バッキング変数が必要であり、とを介してそれにアクセスできるようにする必要があるよう_colorPaintedです。これはちょっと冗長に思えますが、それを行うためのより良い方法はありますか?Objective-Cでは、ゲッターを実装しないままにしておきますが、それはうまくいかないようです。getset

4

2 に答える 2

3

残念ながら、C#ではそれを回避する方法はありません。プロパティのバッキングフィールドを提供する必要があります。

// Player.cs

private Color _colorPainted;

public class Player : Monobehaviour, IColor {
    // ...
    public Color colorPainted {
        get { return _colorPainted; }
        set {
            _colorPainted = value;
            // some other code
        }
     // ...
    }
}
于 2012-10-29T00:53:54.463 に答える
2

値を保持するためにバッキングメンバーを使用します。

public class Player : Monobehaviour, IColor {
    // ...
    private Color _colorPainted;
    public Color colorPainted {
        get { return _colorPainted; }
        set {
            _colorPainted = value;
            // some other code
        }
     // ...
    }
}

プロパティ自体を返すことができない例では、セッターも機能しません。同じ問題。基本的に、これを書くとき:

public Color colorPainted { get; set; }

あなたが本当に書いているのはこれです、ただ短いです:

private Color _colorPainted;
public Color colorPainted
{
    get { return _colorPainted; }
    set { _colorPainted = value; }
}

コンパイラはバッキングフィールドを処理しているだけなので、より短い方法で記述できます。ただし、その短い構文の外に出るときは、バッキングフィールドを自分で管理する必要があります。

バッキングフィールドはプライベートであるため、クラスまたはインターフェイスタイプを使用しているコードに違いはありません。

于 2012-10-29T00:54:15.843 に答える