0

クラスがあるとしましょう

class Object
{
    Vector2 positon;
}

この位置はプロパティ グリッドで編集可能です。オブジェクトから継承するクラスで、これを閲覧不可/読み取り専用として設定するにはどうすればよいでしょうか。[Browsable(false)]と タグは知ってい[ReadOnly(true)]ますが、これにより、すべてのオブジェクトに it が設定されますが、これは望ましくありません。

4

2 に答える 2

1

位置プロパティをとして宣言virtualし、派生型でオーバーライドします。

public class Class1
{
    public virtual string Lol { get; set; }
}

class Class1Impl1 : Class1
{
    [Browsable(false)]
    [ReadOnly(false)]
    public override string Lol
    {
        get
        {
            return base.Lol;
        }
        set
        {
            base.Lol = value;
        }
    }
}

class Class1Impl2 : Class1
{
    [Browsable(true)]
    [ReadOnly(true)]
    public override string Lol
    {
        get
        {
            return base.Lol;
        }
        set
        {
            base.Lol = value;
        }
    }
}

実行時にそれを行うことは別の質問です。IsBrowsableとIsReadOnlyは読み取り専用のプロパティです。実行時にこの属性のインスタンスを変更できるかどうかをグーグルで確認する必要がありますが、そうではないと思います。

于 2013-01-22T09:43:28.010 に答える
1

実行時にブラウズ可能な属性を変更することはできないと思います (そして、私はそれを行うポイントを理解していません) が、メソッドで条件をチェックし、プロパティの書き込みを許可/禁止することができます。それでよろしければ、喜んでモックアップを作成します。

編集:

class SomeClass
{
    private Object _foo;
    private Object _bar;

    public Object Foo
    {
        get
        {
            return _foo;
        }
        set
        {
            if (_bar != _foo) // replace with your test
            {
                _foo = value;
            }
        }
    }

}
于 2013-01-22T12:46:54.423 に答える