使继承的值不能在propertygrid中浏览/读取

时间:2013-01-22 09:32:43

标签: c# inheritance propertygrid

说我有一个班级

class Object
{
    Vector2 positon;
}

这个位置在属性网格中是可编辑的,我怎样才能将它设置为不能在从对象继承的类中进行可浏览/读取。我知道[Browsable(false)][ReadOnly(true)]标签,但这会为所有对象设置它,这是我不想要的。

2 个答案:

答案 0 :(得分: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是只读属性。您应该谷歌知道是否有可能在运行时更改此属性的实例,which I think is not.

答案 1 :(得分: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;
            }
        }
    }

}